1. 程式人生 > >I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之UART移植

I.MX6Q(TQIMX6Q/TQE9)學習筆記——新版BSP之UART移植

我們在核心啟動時候已經配置系統了UART,但是tqimx6q這塊開發板上引出了imx6q的5路TTL介面,其中,uart1和uart2轉成232介面,本文將配置這5路Uart介面。

DTS配置

由於核心中已經有imx6q的uart控制器驅動,因此,我們只需要配置各埠的pinctrl即可。根據tqimx6q的原理圖,我們對我們的DTS作如下修改:

  1. ...  
  2. &uart1 {  
  3.     pinctrl-names = "default";  
  4.     pinctrl-0 = <&pinctrl_uart1_2>;  
  5.     status = "okay";  
  6. };  
  7. &uart2 {  
  8.     pinctrl-names = "default";  
  9.     pinctrl-0 = <&pinctrl_uart2_3>;  
  10.     status = "okay";  
  11. };  
  12. &uart3 {  
  13.     pinctrl-names = "default";  
  14.     pinctrl-0 = <&pinctrl_uart3_2>;  
  15.     status = "okay";  
  16. };  
  17. &uart4 {  
  18.     pinctrl-names = "default";  
  19.     pinctrl-0 = <&pinctrl_uart4_1
    >;  
  20.     status = "okay";  
  21. };  
  22. &uart5 {  
  23.     pintctrl-names = "default";  
  24.     pinctrl-0 = <&pinctrl_uart5_1>;  
  25.     status = "okay";  
  26. };  
  27. ...  
  28. &iomuxc {  
  29.     pinctrl-names = "default";  
  30.     uart1 {  
  31.         pinctrl_uart1_2: uart1grp-2 {  
  32.             fsl,pins = <
  33.                 MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA
     0x1b0b1  
  34.                 MX6QDL_PAD_SD3_DAT6__UART1_RX_DATA 0x1b0b1  
  35.                 MX6QDL_PAD_EIM_D20__UART1_RTS_B 0x1b0b1  
  36.                 MX6QDL_PAD_EIM_D19__UART1_CTS_B 0x1b0b1  
  37.             >;  
  38.         };  
  39.     };  
  40.     uart2 {  
  41.         pinctrl_uart2_3: uart2grp-3 {  
  42.             fsl,pins = <
  43.                 MX6QDL_PAD_EIM_D26__UART2_TX_DATA   0x1b0b1  
  44.                 MX6QDL_PAD_EIM_D27__UART2_RX_DATA   0x1b0b1  
  45.                 MX6QDL_PAD_EIM_D28__UART2_CTS_B 0x1b0b1  
  46.                 MX6QDL_PAD_EIM_D29__UART2_RTS_B 0x1b0b1  
  47.             >;  
  48.         };  
  49.     };  
  50.     uart3 {  
  51.         pinctrl_uart3_2: uart3grp-2 {  
  52.             fsl,pins = <
  53.                 MX6QDL_PAD_EIM_D24__UART3_TX_DATA 0x1b0b1  
  54.                 MX6QDL_PAD_EIM_D25__UART3_RX_DATA 0x1b0b1  
  55.             >;  
  56.         };  
  57.     };  
  58.     uart5 {  
  59.         pinctrl_uart5_1: uart5grp-1 {  
  60.             fsl,pins = <
  61.                 MX6QDL_PAD_KEY_COL1__UART5_TX_DATA 0x1b0b1  
  62.                 MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA 0x1b0b1  
  63.             >;  
  64.         };  
  65.     };  
  66. };  
修改之後重新編譯並燒寫DTB,新的DTB可以正常啟動核心。

測試方法

測試串列埠的方式有很多,可以編寫專門的測試程式來測試,這方面的資料網上可以找到很多,我這裡就不舉例了。本文使用了偷懶的方式,在uboot中將bootargs臨時修改為如下內容:

  1. setenv bootargs 'noinitrd console=ttymxc1,115200 root=/dev/mmcblk0p1 rw rootfstype=ext4init=/linuxrc'  
然後執行boot指令,這時,連線到uart2的串列埠終端就可以看到核心的啟動log了,當然也可以正常的進入linux控制檯。其它三個串列埠都是TTL方式的,我手頭上沒有這種電平轉換模組,就不測試了。

至此,tqimx6q的全部串列埠都移植好了。有任何疑問可以留言討論。