連載-iMX6ULL 軟件定制應用筆記 -3個常見問題解決思路

原創 作者 imx6ULL 2020-12-16 17:13:00 iMX6ULL

本文以飛凌OKMX6ULL-S開發板為基礎講解,系統為Linux,一共總結了14個iMX6ULL小知識點,分三期完成。


iMX6ULL應用筆記目錄
1.1 管腳復用的參數配置方法(PINMUX)
1.2 Windows下轉換開機LOGO圖片格式 
1.3  8189es SDIO WIFI使用及測試 
1.4  USB轉串口芯片的支持(PL2303)
1.5  增加串口
1.6  串口配置DMA
1.7  LCD轉LVDS模塊
1.8  LCD轉VGA模塊
1.9  硬浮點運算 
1.10  OTG修改模式 
1.11  使用EC20模塊實現4G-AP功能 
1.12  SPI轉CAN接口 
1.13  ADC接口
1.14  LCD的屏幕參數調整


注意: 本應用筆記只是舉例說明,如果飛凌iMX6ULL提供的軟件版本更新之后,有些位置名稱等內容可能會及時更新,修改方法參考下面修改。

注意: 本應用筆記參照imx6ull-S-emmc-1024x600c7.dts 設備樹基礎上修改,其他屏幕設備樹方法類似。


設備樹說明(參考用戶資料v1.0):

菜單選項

eMMC版本對應設備樹名稱

NAND版本對應設備樹名稱

800x480cr7

imx6ull-S-emmc-800x480cr7.dts

imx6ull-S-gpmi-800x480cr7.dts

1280x800c10dot1

imx6ull-S-emmc-1280x800c10dot1.dts

imx6ull-S-gpmi-1280x800c10dot1.dts

1024x600c7

imx6ull-S-emmc-1024x600c7.dts

imx6ull-S-gpmi-1024x600c7.dts

800x600r8

imx6ull-S-emmc-800x600r8.dts

imx6ull-S-gpmi-800x600r8.dts

800x600r10dot4

imx6ull-S-emmc-800x600r10dot4.dts

imx6ull-S-gpmi-800x600r10dot4.dts

640x480r5dot6

imx6ull-S-emmc-640x480r5dot6.dts

imx6ull-S-gpmi-640x480r5dot6.dts

480x272r4dot3

imx6ull-S-emmc-480x272r4dot3.dts

imx6ull-S-gpmi-480x272r4dot3.dts

320x240r3dot5

imx6ull-S-emmc-320x240r3dot5.dts

imx6ull-S-gpmi-320x240r3dot5.dts

nand設備樹包含與其對應的emmc設備樹,大部分配置在emmc設備樹中。

1.1 管腳復用的參數配置方法(PINMUX)

管腳復用所需要修改的文件位置:

arch/arm/boot/dts/imx6ull-pinfunc.h

#define MX6UL_PAD_LCD_DATA16__UART7_DCE_TX                        0x0158 0x03E4 0x0000 0x1 0x0
#define MX6UL_PAD_LCD_DATA17__UART7_DCE_RX                        0x015C 0x03E8 0x0654 0x1 0x3

arch/arm/boot/dts/imx6ull-S-emmc-1024x600c7.dts

pinctrl_uart7: uart7_grp {
    fsl,pins = <
        MX6UL_PAD_LCD_DATA17__UART7_DCE_RX  0x1B0B1
        MX6UL_PAD_LCD_DATA16__UART7_DCE_TX  0x1B0B1
    >;
};

配置說明:

mux_ctrl_ofs

pad_ctrl_ofs

sel_input_ofs

mux_mode

sel_input

pad_ctrl

0x0158   

0x03E4

0x0000

0x1

0x0

0x1B0B1

相應參數的含義參考官方手冊《IMX6ULLRM.pdf》,此處以LCD_DATA16為例:

1. 確定mux_ctrl寄存器地址和mux_mod值。(p1631)

確定mux_ctrl寄存器地址和mux_mod值 

其中mux_ctrl_ofs 為0x0158,mux_mode為ATL1。(注意:此處配置的是MUX_CTL,請區別于PAD_CTL)

2. 確定pad_ctrl寄存器地址和pad_ctl值。

確定pad_ctrl寄存器地址和pad_ctl值。 

其中pad_ctrl_ofs為0x03E4,pad_ctrl 為0x1b0b1。(注意:此處配置的是PAD_CTL,請區別于MUX_CTL,pad_ctrl值根據使用需要配置)

   3. 確定sel_input寄存器的地址和sel_input的值。

確定sel_input寄存器的地址和sel_input的值。 

由于沒有與LCD_DATA16對應的sel_input_ofs和sel_input值,只需要填0即可,sel_input_ofs為0x000,sel_input為0。(注意:上圖只是UART7_RTS參考,相應數據位置參考箭頭指向即可)

1.2  Windows下轉換開機LOGO圖片格式

參考屏幕對應的分辨率:(默認7寸1024x600)

屏幕

分辨率

7寸

800x480

7寸

1024x600

8寸

800x600

注意前提已經得到相應尺寸的logo.jpg圖片,之后使用以下軟件轉換LOGO的位深及格式。

Windows更改方法:(工具提供軟件FSResizer43.zip)

1. 運行箭頭指向的軟件。

運行箭頭指向的軟件 

2. 按照步驟配置前5步:

配置前5步 

3. 接著選擇位深為8bit:

位深為8bit 

最后配置導出位置及格式:

導出位置及格式 

按照燒寫過程,可將圖片重新命名為logo.bmp替換燒錄工具中的logo.bmp文件,即可替換出廠Logo圖片。

 1.3  8189es SDIO WIFI使用及測試

SDIO WIFI無線局域模組是選配模塊。如若有需求,請聯系飛凌嵌入式銷售人員。i.MX6ULL支持飛凌提供的8189es模塊。連接方法如圖: 

WIFI與iMX6UL的連接方法 

 

使用之前需要修改替換設備樹。采用的是arch/arm/boot/dts/imx6ull-14x14-evk.dts由:

&usdhc1 {
cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
};

修改為:

&usdhc1 {
/*  cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>; */
nonremovable;
};

編譯并替換為此設備樹。

SDIO WIFI功能測試步驟:

步驟1:開發板斷電,連接好飛凌的SDIO WIFI到飛凌開發板的SDIO 接口,正確安裝如上圖。

步驟2:開發板上電,啟動Linux系統,默認插入之后,模塊會自動加載,如果模塊沒自動加載,請確保已經卸載之后,手動加載。

root@fl-imx6ull:~# insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtl8189ES/8189es.ko

查看加載驅動:

root@fl-imx6ull:~# lsmod

出現如下信息,表示模塊和驅動匹配成功

Module                  Size  Used by
8189es                885053  0

步驟3:執行下面的命令,檢測開發板wifi網卡狀況,路由器使用wpa加密。

root@fl-imx6ull:~# ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr A0:F4:59:73:22:C6
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

步驟4:關閉以太網卡,命令如下。

root@fl-imx6ull:~# ifconfig eth0 down
root@fl-imx6ull:~# ifconfig eth1 down

步驟5:啟動SDIO WIFI,命令如下。

root@fl-imx6ull:~# ifconfig wlan0 up

步驟6:使用SDIO  WIFI掃描無線網絡設備,命令如下。

root@fl-imx6ull:~# iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 4C:E9:E4:B8:65:6A
                    ESSID:"forlinx"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.412 GHz (Channel 1)
                    Encryption key:on
                    Bit Rates:300 Mb/s
                    Extra:wpa_ie=dd160050f20101000050f20401000050f20401000050f202
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Extra:
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    Quality=68/100  Signal level=42/100
                    Extra:fm=0001

步驟7:設置SDIO WIFI的ESSID。(此步驟可以省略)

root@fl-imx6ull:~# iwconfig wlan0 essid frolinx
RTL871X: set ssid [frolinx] fw_state=0x00000008

步驟8:生成wpa密碼,wpa_passphrase命令從標準輸入讀取明文,執行命令后占用終端等待明文輸入。

 root@fl-imx6ull:~# wpa_passphrase "forlinx"  > wpa.conf
xxx
xxx為輸入明文密碼,回車結束后自動保存到wpa.conf。

步驟9:連接路由器,命令如下。

 root@fl-imx6ull:~# wpa_supplicant -Dwext -cwpa.conf -iwlan0 &
[1] 599
root@fl-imx6ull:~# Successfully initialized wpa_suppRTL871X: set bssid:00:00:00:00:00:00
licant
rfkill: Cannot open RFKILRTL871X: set ssid [g?isQ?J?)?????F|?T??vZ.c3???] fw_state=0x00000008
L control device
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
ioctl[SIOCGIWSCAN]: Resource temporarily unavailable
RTL871X: indicate disassoc
wlan0: Trying to associate with 04:d7:a5:84:fa:40 (SSID='forlinx'RTL871X: set ssid [forlinx] fw_state=0x00000008
 freq=2437 MHz)
RTL871X: set bssid:04:d7:a5:84:fa:40
RTL871X: start auth
RTL871X: auth success, start assoc
RTL871X: assoc success
RTL871X: recv eapol packet
IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
wlan0: Associated with 04:d7:a5:84:fa:40
RTL871X: send eapol packet
RTL871X: recv eapol packet
RTL871X: send eapol packet
RTL871X: set pairwise key camid:4, addr:04:d7:a5:84:fa:40, kid:0, type:AES
wlan0: WPA: Key negotiation complRTL871X: set group key camid:5, addr:04:d7:a5:84:fa:40, kid:2, type:AES
eted with 04:d7:a5:84:fa:40 [PTK=CCMP GTK=CCMP]
wlan0: CTRL-EVENT-CONNECTED - Connection to 04:d7:a5:84:fa:40 completed [id=0 id_str=]
如果出現wifi模塊連接失敗,重連路由器前,需要采用ps查看是否存在wpa_supplicant -Dwext -cwpa.conf -iwlan0進程。如果存在,將此進程kill掉之后,再連接路由器。

步驟10:自動ip地址分配dhcp,命令如下。

  root@fl-imx6ull:~# udhcpc -iwlan0
udhcpc (v1.24.1) started
Sending discover...
Sending select for 192.168.5.94...
Lease of 192.168.5.94 obtained, lease time 36000
/etc/udhcpc.d/50default: Adding DNS 222.222.202.202
/etc/udhcpc.d/50default: Adding DNS 222.222.222.222

步驟11:ping ip或者域名,命令如下。

root@fl-imx6ull:~# ping www.powerye.cn
PING www.powerye.cn (211.149.226.120): 56 data bytes
64 bytes from 211.149.226.120: seq=0 ttl=51 time=63.650 ms
64 bytes from 211.149.226.120: seq=1 ttl=51 time=59.575 ms
64 bytes from 211.149.226.120: seq=2 ttl=51 time=54.193 ms
64 bytes from 211.149.226.120: seq=3 ttl=51 time=114.156 ms
64 bytes from 211.149.226.120: seq=4 ttl=51 time=206.920 ms
^C
--- www.powerye.cn ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 54.193/99.698/206.920 ms
步驟12:卸載已經加入內核的模塊。
 root@fl-imx6ull:~# rmmod 8189es
RTL871X: module exit start
RTL871X: indicate disassoc
wlan0: CTRL-EVENT-DISCONNECTED bssid=04:d7:a5:84:fa:40 reason=3 locally_generated=1
RTL871X: rtw_ndev_uninit(wlan0) if1
RTL871X: rtw_cmd_thread: DriverStopped(True) SurpriseRemoved(False) break at line 564
RTL871X: rtw_dev_unload: driver not in IPS
RTL871X: module exit success
如果采用wep加密方式路由器連接時,采用如下命令:

設置essid:

 root@fl-imx6ull:~# iwconfig wlan0 essid “devnet”
設置路由器訪問密碼:
root@fl-imx6ull:~# iwconfig wlan0 key “1234567890”
之后動態分配IP或靜態設置IP與網關均可。

注意:

1. 本小節中是一個SDIO WIFI連接路由的示例。由于網絡環境的不同,所以在您做本實驗時,請根據實際情況進行設置。


未完,轉下篇 :連載-iMX6ULL 軟件定制應用筆記 -9個知識點講解  點擊了解

相關產品 >

  • OKMX6ULL-S開發板

    iMX6ULL是飛凌新近推出的一款開發板,iMX6ULL與iMX6UL開發板相比,功能無區別完全兼容,配置升級,性能高,價格低。根據介紹可看出i.MX6ULL參數豐富 ,采用NXP i.MX6ULL處理器芯片,郵票孔封裝,支持Linux系統,i.MX6ULL開發板資料豐富,方便二次開發設計。

    了解詳情
    OKMX6ULL-S開發板
  • FETMX6ULL-S核心板

    飛凌新出的一款采用NXP高性能、高效、低成本處理器的核心板—FETMX6ULL-S核心板,i.MX6ULL核心板采用郵票孔連接方式,ARM Cortex-A7內核,原生兩路網口,兩路Can和八路串口,可以和多種設備同時通訊。i.MX6ULL核心板支持工業級和擴展商業級兩種配置,并且經過了高低溫測試的檢驗,iMX6ULL核心板采用Linux4.1.15+Qt5.6操作系統,方便開發自己的應用程序。 了解詳情
    FETMX6ULL-S核心板
  • FETMX6ULL-C核心板

    FETMX6ULL-C核心板采用NXP i.MX6ULL處理器開發設計,是一款高性能Linux核心板,采用低功耗的ARM Cortex-A7架構,運行速度高達800MHz。iMX6ULL核心板29*40mm  ,iMX6ULL這款處理器功能接口資源豐富,供貨周期長。

    了解詳情
    FETMX6ULL-C核心板
  • OKMX6ULL-C開發板

    40*29mm,雙網雙CAN,8路串口| i.MX6ULL開發板是基于NXP i.MX6ULL設計開發的的一款Linux開發板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應場景豐富。 了解詳情
    OKMX6ULL-C開發板

推薦閱讀 換一批 換一批