連載-iMX6ULL 軟件定制應(yīng)用筆記 -3個(gè)常見問題解決思路
本文以飛凌OKMX6ULL-S開發(fā)板為基礎(chǔ)講解,系統(tǒng)為Linux,一共總結(jié)了14個(gè)iMX6ULL小知識點(diǎn),分三期完成。
iMX6ULL應(yīng)用筆記目錄
1.1 管腳復(fù)用的參數(shù)配置方法(PINMUX)
1.2 Windows下轉(zhuǎn)換開機(jī)LOGO圖片格式
1.3 8189es SDIO WIFI使用及測試
1.4 USB轉(zhuǎn)串口芯片的支持(PL2303)
1.5 增加串口
1.6 串口配置DMA
1.7 LCD轉(zhuǎn)LVDS模塊
1.8 LCD轉(zhuǎn)VGA模塊
1.9 硬浮點(diǎn)運(yùn)算
1.10 OTG修改模式
1.11 使用EC20模塊實(shí)現(xiàn)4G-AP功能
1.12 SPI轉(zhuǎn)CAN接口
1.13 ADC接口
1.14 LCD的屏幕參數(shù)調(diào)整
注意: 本應(yīng)用筆記只是舉例說明,如果飛凌iMX6ULL提供的軟件版本更新之后,有些位置名稱等內(nèi)容可能會及時(shí)更新,修改方法參考下面修改。
注意: 本應(yīng)用筆記參照imx6ull-S-emmc-1024x600c7.dts 設(shè)備樹基礎(chǔ)上修改,其他屏幕設(shè)備樹方法類似。
設(shè)備樹說明(參考用戶資料v1.0):
菜單選項(xiàng) |
eMMC版本對應(yīng)設(shè)備樹名稱 |
NAND版本對應(yīng)設(shè)備樹名稱 |
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設(shè)備樹包含與其對應(yīng)的emmc設(shè)備樹,大部分配置在emmc設(shè)備樹中。
1.1 管腳復(fù)用的參數(shù)配置方法(PINMUX)
管腳復(fù)用所需要修改的文件位置:
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 |
相應(yīng)參數(shù)的含義參考官方手冊《IMX6ULLRM.pdf》,此處以LCD_DATA16為例:
1. 確定mux_ctrl寄存器地址和mux_mod值。(p1631)
其中mux_ctrl_ofs 為0x0158,mux_mode為ATL1。(注意:此處配置的是MUX_CTL,請區(qū)別于PAD_CTL)
2. 確定pad_ctrl寄存器地址和pad_ctl值。
其中pad_ctrl_ofs為0x03E4,pad_ctrl 為0x1b0b1。(注意:此處配置的是PAD_CTL,請區(qū)別于MUX_CTL,pad_ctrl值根據(jù)使用需要配置)
3. 確定sel_input寄存器的地址和sel_input的值。
由于沒有與LCD_DATA16對應(yīng)的sel_input_ofs和sel_input值,只需要填0即可,sel_input_ofs為0x000,sel_input為0。(注意:上圖只是UART7_RTS參考,相應(yīng)數(shù)據(jù)位置參考箭頭指向即可)
1.2 Windows下轉(zhuǎn)換開機(jī)LOGO圖片格式
參考屏幕對應(yīng)的分辨率:(默認(rèn)7寸1024x600)
屏幕 |
分辨率 |
7寸 |
800x480 |
7寸 |
1024x600 |
8寸 |
800x600 |
注意前提已經(jīng)得到相應(yīng)尺寸的logo.jpg圖片,之后使用以下軟件轉(zhuǎn)換LOGO的位深及格式。
Windows更改方法:(工具提供軟件FSResizer43.zip)
1. 運(yùn)行箭頭指向的軟件。
2. 按照步驟配置前5步:
3. 接著選擇位深為8bit:
最后配置導(dǎo)出位置及格式:
按照燒寫過程,可將圖片重新命名為logo.bmp替換燒錄工具中的logo.bmp文件,即可替換出廠Logo圖片。
1.3 8189es SDIO WIFI使用及測試
SDIO WIFI無線局域模組是選配模塊。如若有需求,請聯(lián)系飛凌嵌入式銷售人員。i.MX6ULL支持飛凌提供的8189es模塊。連接方法如圖:
使用之前需要修改替換設(shè)備樹。采用的是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; };
編譯并替換為此設(shè)備樹。
SDIO WIFI功能測試步驟:
步驟1:開發(fā)板斷電,連接好飛凌的SDIO WIFI到飛凌開發(fā)板的SDIO 接口,正確安裝如上圖。
步驟2:開發(fā)板上電,啟動Linux系統(tǒng),默認(rèn)插入之后,模塊會自動加載,如果模塊沒自動加載,請確保已經(jīng)卸載之后,手動加載。
root@fl-imx6ull:~# insmod /lib/modules/$(uname -r)/kernel/drivers/net/wireless/realtek/rtl8189ES/8189es.ko
查看加載驅(qū)動:
root@fl-imx6ull:~# lsmod
出現(xiàn)如下信息,表示模塊和驅(qū)動匹配成功
Module Size Used by 8189es 885053 0
步驟3:執(zhí)行下面的命令,檢測開發(fā)板wifi網(wǎng)卡狀況,路由器使用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:關(guān)閉以太網(wǎng)卡,命令如下。
root@fl-imx6ull:~# ifconfig eth0 down root@fl-imx6ull:~# ifconfig eth1 down
步驟5:啟動SDIO WIFI,命令如下。
root@fl-imx6ull:~# ifconfig wlan0 up
步驟6:使用SDIO WIFI掃描無線網(wǎng)絡(luò)設(shè)備,命令如下。
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:設(shè)置SDIO WIFI的ESSID。(此步驟可以省略)
root@fl-imx6ull:~# iwconfig wlan0 essid frolinx RTL871X: set ssid [frolinx] fw_state=0x00000008
步驟8:生成wpa密碼,wpa_passphrase命令從標(biāo)準(zhǔn)輸入讀取明文,執(zhí)行命令后占用終端等待明文輸入。
root@fl-imx6ull:~# wpa_passphrase "forlinx" > wpa.conf
xxx
xxx為輸入明文密碼,回車結(jié)束后自動保存到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=]如果出現(xiàn)wifi模塊連接失敗,重連路由器前,需要采用ps查看是否存在wpa_supplicant -Dwext -cwpa.conf -iwlan0進(jìn)程。如果存在,將此進(jìn)程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:卸載已經(jīng)加入內(nèi)核的模塊。
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加密方式路由器連接時(shí),采用如下命令:
設(shè)置essid:
root@fl-imx6ull:~# iwconfig wlan0 essid “devnet”
設(shè)置路由器訪問密碼:
root@fl-imx6ull:~# iwconfig wlan0 key “1234567890”之后動態(tài)分配IP或靜態(tài)設(shè)置IP與網(wǎng)關(guān)均可。
注意:
1. 本小節(jié)中是一個(gè)SDIO WIFI連接路由的示例。由于網(wǎng)絡(luò)環(huán)境的不同,所以在您做本實(shí)驗(yàn)時(shí),請根據(jù)實(shí)際情況進(jìn)行設(shè)置。
未完,轉(zhuǎn)下篇 :連載-iMX6ULL 軟件定制應(yīng)用筆記 -9個(gè)知識點(diǎn)講解 點(diǎn)擊了解
相關(guān)產(chǎn)品 >
-
OKMX6ULL-S開發(fā)板
iMX6ULL是飛凌新近推出的一款開發(fā)板,iMX6ULL與iMX6UL開發(fā)板相比,功能無區(qū)別完全兼容,配置升級,性能高,價(jià)格低。根據(jù)介紹可看出i.MX6ULL參數(shù)豐富 ,采用NXP i.MX6ULL處理器芯片,郵票孔封裝,支持Linux系統(tǒng),i.MX6ULL開發(fā)板資料豐富,方便二次開發(fā)設(shè)計(jì)。
了解詳情 -
FETMX6ULL-S核心板
飛凌新出的一款采用NXP高性能、高效、低成本處理器的核心板—FETMX6ULL-S核心板,i.MX6ULL核心板采用郵票孔連接方式,ARM Cortex-A7內(nèi)核,原生兩路網(wǎng)口,兩路Can和八路串口,可以和多種設(shè)備同時(shí)通訊。i.MX6ULL核心板支持工業(yè)級和擴(kuò)展商業(yè)級兩種配置,并且經(jīng)過了高低溫測試的檢驗(yàn),iMX6ULL核心板采用Linux4.1.15+Qt5.6操作系統(tǒng),方便開發(fā)自己的應(yīng)用程序。 了解詳情 -
FETMX6ULL-C核心板
FETMX6ULL-C核心板采用NXP i.MX6ULL處理器開發(fā)設(shè)計(jì),是一款高性能Linux核心板,采用低功耗的ARM Cortex-A7架構(gòu),運(yùn)行速度高達(dá)800MHz。iMX6ULL核心板29*40mm ,iMX6ULL這款處理器功能接口資源豐富,供貨周期長。
了解詳情 -
OKMX6ULL-C開發(fā)板
40*29mm,雙網(wǎng)雙CAN,8路串口| i.MX6ULL開發(fā)板是基于NXP i.MX6ULL設(shè)計(jì)開發(fā)的的一款Linux開發(fā)板 ,主頻800MHz,體積小,其核心板僅40*29mm,采用板對板連接器,適應(yīng)場景豐富。 了解詳情