MT7628/MT7688 修改串口2作爲調試串口 所踩的坑

 MTK的芯片設計有些讓人搞不懂,非得將串口作爲啓動選擇引腳;

MT76x8 參考其datesheet,TXD0 啓動時必須爲低電平,TXD1啓動時必須保持高電平;

一共最多3個串口,唯獨UART2不影響啓動;但是UART2與 NET PORT2是複用的;使用uart2必須犧牲1個網口;

準確來說是犧牲所有網口(PORT0除外),因此MT76x8 要麼作爲單網口使用要麼作爲5網口使用,沒有中間模式;這一點也比較蛋疼;

但這不是我們今天要關心的;今天只談uart2作爲啓動串口;

設定uart2作爲啓動調試串口,需要修改2個地方;一個是uboot,一個是kernel;

首先,在Uboot中    board/rt2880/serial.c,設定串口模式及復位串口;

參考datesheet



RSTCTL偏移地址0x34;


RSTCTL  bit12,19,20分別對應uart0,1,2,首先需將其復位;


然後將UART2設爲UART-lite模式,其默認爲GPIO模式;

修改代碼,位於board/rt2880/serial.c   serial_setbrg 函數,

 //*(unsigned long *)(RALINK_SYSCTL_BASE + 0x0034) |= cpu_to_le32(1<<19|1<<12);
    *(unsigned long *)(RALINK_SYSCTL_BASE + 0x0034) |= cpu_to_le32(3<<19|1<<12); // 12 19 20  uart012置1
    /* RST Control change from W1C to W1W0 to reset, update 20080812 */
    //*(unsigned long *)(RALINK_SYSCTL_BASE + 0x0034) &= ~(1<<19|1<<12);
    *(unsigned long *)(RALINK_SYSCTL_BASE + 0x0034) &= ~(3<<19|1<<12);      // 12 19 20  uart012清零,復位控制(復位芯片部分功能)
    {
        u32 reg;
        
        reg = ra_inl(RT2880_GPIOMODE_REG);
        reg &= ~(0x3 << 26);                           // bit 26 27 清零,uart2
        //reg |= (0x3 << 2);
        ra_outl(RT2880_GPIOMODE_REG, reg);

    }

其次修改board/rt2880/serial.h

#define CFG_RT2880_CONSOLE    RT2880_UART3

定義console爲uart3

到此Uboot修改完畢。

然後Kernel中,修改比較簡單,如使用openwrt,只需在dts中定義console爲ttyS2即可;

chosen {
		bootargs = "console=ttyS2,115200";
	};

到此全部修改完畢。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章