硬件:米爾i.MX6UL開發板MYD-Y6ULX 簡介:MYD-Y6ULX開發板(i.MX6UL開發板)由MYC-Y6ULX核心板和底板組成,基于NXP i.MX6UL處理器或i.MX6ULL處理器可選,MYD-Y6ULX開發板(i.MX6ULL開發板)提供豐富外設硬件,板載了Mini PCIE接口(用于4G模塊)及SIM卡槽、WIFI芯片及天線接口、雙百兆網口、LCD液晶接口、音頻接口、帶隔離的CAN,RS485,RS232等。 linux應用開發 本章主要介紹MYD-Y6ULX開發板底板外圍硬件設備應用例程的使用。 使用前,需要先安裝Yocto提供的SDK工具鏈,再編譯所有例程代碼,并拷貝至開發板目錄下。 編譯應用例程 加載工具鏈到當前終端后,可以查看gcc的版本信息,確認當前環境已正確加載。 $source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-\ poky-linux-gnueabi $ ARM-poky-linux-gnueabi-gcc --version arm-poky-linux-gnueabi-gcc (GCC) 5.3.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 編譯示例代碼: $cd $DEV_root/04-Sources $tar xvf example.tar.gz $cd example $make LCD測試 本例程演示對Linux的FrameBuffer設備操作,實現液晶輸出顯示RGB顏色和顏色合成測試。 例程基于Linux FrameBuffer API接口開發。 測試前需要把 LCD連接至J3接口上。 米爾科技提供三種LCD模塊,Linux默認配置為MY-TFT043RV2。
執行程序后,LCD液晶屏會出現相應顏色,以下是終端輸出信息: # ./framebuffer_test The framebuffer device was opened successfully. vinfo.xres=480 vinfo.yres=272 vinfo.bits_per_bits=16 vinfo.xoffset=0 vinfo.yoffset=0 red.offset=11 green.offset=5 blue.offset=0 transp.offset=0 finfo.line_length=960 finfo.type = PACKED_PIXELS The framebuffer device was mapped to memory successfully. color: red rgb_val: 0000F800 color: green rgb_val: 000007E0 color: blue rgb_val: 0000001F color: r & g rgb_val: 0000FFE0 color: g & b rgb_val: 000007FF color: r & b rgb_val: 0000F81F color: white rgb_val: 0000FFFF color: black rgb_val: 00000000 支持MY-TFT070RV2的配置方法 MYD-Y6ULX開發板中提供的Linux代碼已經支持該模塊的顯示和觸摸功能。 MY-TFT070RV2的觸摸功能是通過ADC采樣方式,dts代碼中已配置好,只 需要啟用相應功能即要可。 第一步,編輯"arch/arm/boot/dts/myb-y6ull-14x14.dts"文件,修改tsc的status屬性為okay。 &tsc { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_tsc>; xnur-GPIO = <&gpio1 3 GPIO_ACTIVE_LOW>; measure-delay-time = <0xfffff>; pre-charge-time = <0xffff>; status = "okay"; }; 第二步,將默認的4.3寸屏莫的配置注釋,并打開7.0寸的配置。 找到lcfif節點下的display-timings節點,修改如下: display-timings { native-mode = <&timing0>; /* timing0: timing0 { clock-frequency = <9200000> hsync-len = <41>; vback-porch = <2>; vfront-porch = <4>; vsync-len = <10>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <0>; }; */ timing0: timing0 { clock-frequency = <33000000>; hactive = <800>; vactive = <480>; hfront-porch = <210>; hback-porch = <46>; hsync-len = <1>; vback-porch = <22>; vfront-porch = <23>; vsync-len = <20>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; }; 支持MY-TFT070CV2的配置方法 MY-TFT070CV2模塊的觸摸使用的是I2C方式通訊,叢設備已添加到i2c2控制器上。 使用前禁用tsc控制器,再啟用7寸屏的配置參數即可。 第一步,編輯"arch/arm/boot/dts/myb-y6ull-14x14.dts"文件,修改tsc的status屬性為disabled。 &tsc { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_tsc>; xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>; measure-delay-time = <0xfffff>; pre-charge-time = <0xffff>; status = "disabled"; }; 第二步,將默認的4.3寸屏莫的配置注釋,并打開7.0寸的配置。 找到lcfif節點下的display-timings節點,修改如下: display-timings { native-mode = <&timing0>; /* timing0: timing0 { clock-frequency = <9200000> hsync-len = <41>; vback-porch = <2>; vfront-porch = <4>; vsync-len = <10>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <0>; }; */ timing0: timing0 { clock-frequency = <33000000>; hactive = <800>; vactive = <480>; hfront-porch = <210>; hback-porch = <46>; hsync-len = <1>; vback-porch = <22>; vfront-porch = <23>; vsync-len = <20>; hsync-active = <0>; vsync-active = <0>; de-active = <1>; pixelclk-active = <1>; }; }; 觸摸測試 MYD-Y6ULX支持兩種觸摸方式,電容和電阻。 米爾科技可提供兩種帶觸摸的液晶,7寸電容MY-TFT070CV2和4.3寸電阻MY-TFT043RV2。 觸摸測試可以使用ts_calibrate和ts_test命令,ts_calibrate用于觸摸校驗,ts_test用于測試。 其中,命令需要變量"TSLIB_TSDEVICE"來找到觸摸設 備,不同觸摸方式的設備節點不一定相同,請對應設備填寫。 # export TSLIB_TSDEVICE=/dev/input/event1 # ts_calibrate //測試觸摸屏 # ts_test Ethernet 測試 本例使用Linux sokect API,實現簡單的C/S結構的程序,兩個程序通過TCP/IP協議棧通信。 將可執行程序arm_CLIent拷貝至開發板,pc_server拷貝 至PC,將開發板和PC接入網絡。 在 PC 上配置IP并運行服務程序: $ sudo ifconfig eth0 192.168.1.111 $ ./pc_server REC FROM: 192.168.1.222 在開發板上運行客戶程序,將看到所發送的信息: # ifconfig eth0 192.168.1.222 # ./arm_client 192.168.1.111 form server: Make Your idea Real! GPIO-KEY 測試 本例演示如何在Linux用戶空間讀取按鍵狀態和鍵值。 運行gpio_key程序后,按下或釋放S2按鍵,串口會輸出相應按鍵的狀態信息。 按下"Ctrl-C"可 退出程序。 在開發板的控制終端上執行程序: # ./gpio_key /dev/input/event2 Hit any key on board ...... key 2 Pressed key 2 Released key 2 Pressed key 2 Released GPIO-LED 測試 本例程演示使用Linux系統API操作開發板上的LED燈,D30。 運行程序后,D30閃爍。 按下"Ctrl-C"可結束程序。 # ./gpio_led /sys/class/leds/user/brightness USB Host 測試 使用USB存儲設備插入USB HOST(J6)接口,調試串口會輸出檢測設備信息。 同時,使用將此存儲設備掛載至linux系統下對其讀寫。 # usb 1-2: USB disconnect, device number 6 usb 1-2: new high-speed USB device number 7 using atmel-ehci usb 1-2: New USB device found, idVendor=0bda, idProduct=0316 usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-2: Product: USB3.0-CRW usb 1-2: Manufacturer: Generic usb 1-2: SerialNumber: 20120501030900000 usb-storage 1-2:1.0: USB Mass Storage device detected scsi host5: usb-storage 1-2:1.0 scsi 5:0:0:0: Direct-Access Generic- SD/MMC 1.00 PQ: 0 ANSI: 4 sd 5:0:0:0: [sda] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB) sd 5:0:0:0: [sda] Write Protect is off sd 5:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sda2 sd 5:0:0:0: [sda] Attached SCSI removable disk # mount /dev/sda1 /mnt/ # echo "hello" > /mnt/hello.txt # cat /mnt/hello.txt hello USB Device測試 本例程演示使用開發板的MICro USB接口(J26)作為Device模式,可以將指定的文件或設備模擬為設備,連接到其它USB HOST設備。 這里把內存作為 存儲設備提供給HOST設備。 開發板上使用modprobe加載驅動: #mkfs.vfat /dev/ram1 #modprobe g_mass_storage file=/dev/ram1 removable=1 \ iSerialNumber="1234" [ 3048.950498] Mass Storage Function, version: 2009/09/11 [ 3048.982245] LUN: removable file: (no medium) [ 3048.997849] LUN: removable file: /dev/ram1 [ 3049.000674] Number of LUNs=1 [ 3049.002272] Number of LUNs=1 [ 3049.023990] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11 [ 3049.029682] g_mass_storage gadget: g_mass_storage ready [ 3094.766373] g_mass_storage gadget: high-speed config #1: Linux File-Backed Storage Linux PC機上查看到有USB設備接入,SerialNumber為"1234",Manufacturer是內核構建版本號: #dmesg | tail -n 20 [2872436.778616] usb 1-1: USB disconnect, device number 102 [2872436.779156] sd 3:0:0:0: [sdb] Synchronizing SCSI cache [2872436.779201] sd 3:0:0:0: [sdb] Synchronize Cache(10) failed: Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK [2872442.508567] usb 1-1: new high-speed USB device number 103 using xhci_hcd [2872442.650549] usb 1-1: New USB device found, idVendor=0525, idProduct=a4a5 [2872442.650551] usb 1-1: New USB device strings: Mfr=3, Produ ct=4, SerialNumber=5 [2872442.650552] usb 1-1: Product: Mass Storage Gadget [2872442.650553] usb 1-1: Manufacturer: Linux 4.1.15-1.2.0+g8d9 8da6 with 2184000.usb [2872442.650554] usb 1-1: SerialNumber: 1234 [2872442.657827] usb-storage 1-1:1.0: USB Mass Storage device detected [2872442.657895] usb-storage 1-1:1.0: Quirks match for vid 0525 pid a4a5: 10000 [2872442.657923] scsi host3: usb-storage 1-1:1.0 [2872443.669426] scsi 3:0:0:0: Direct-Access Linux FileStor Gadget 0401 PQ: 0 ANSI: 2 [2872443.669886] sd 3:0:0:0: Attached scsi generic sg1 type 0 [2872443.670820] sd 3:0:0:0: [sdb] 131072 512-byte logical blocks: (67.1 MB/64.0 MiB) [2872443.779976] sd 3:0:0:0: [sdb] Write Protect is off [2872443.779979] sd 3:0:0:0: [sdb] Mode Sense: 0f 00 00 00 [2872443.890093] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [2872444.110372] sdb: [2872444.330074] sd 3:0:0:0: [sdb] Attached SCSI removable disk RS485 測試 本例程演示如何使用 Linux Serial API編程,使用RS485接口,實現數據發送和接收,詳細請參考源碼。 硬件連接 MYD-Y6ULX上有一個RS485接口(J10),可以將A,B信號線與另外的RS485設備相連接。 或者是USB轉RS485的轉換器設備。 軟件測試 將編譯出來的可執行程序拷貝至MYD-Y6ULX開發板系統內。 MYD-Y6ULX作為發送端執行以下命令,另外一端的設備可以接數據。 # ./rs485_write -d /dev/ttymxc3 -b 4800 -e 1 SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 另一個設備作為接收端: # ./rs485_read -d /dev/ttymxc3 -b 4800 -e 1 RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14 RS232 測試 本例程演示如何使用 Linux Serial API編程,使用RS232接口,實現數據發送和接收,詳細請參考源碼。 硬件連接 MYD-Y6ULX上有一個RS232接口(J10),可以將TXD,RXD信號線與另外的RS232設備相連接。 或者是USB轉RS232的轉換器設備,此處使用USB轉 RS232設備連接到PC。 軟件測試 將編譯出來的可執行程序拷貝至MYD-Y6ULX開發板系統內。 MYD-Y6ULX作為發送端執行以下命令,PC端接收數據。 # ./UART_test -d /dev/ttymxc1 -b 115200 /dev/ttyS1 RECV 10 total /dev/ttyS1 RECV: 1234567890 /dev/ttyS1 RECV 10 total /dev/ttyS1 RECV: 1234567890 /dev/ttyS1 RECV 10 total /dev/ttyS1 RECV: 1234567890 /dev/ttyS1 RECV 10 total /dev/ttyS1 RECV: 1234567890 在PC端可以使用串口工具查看接收的數據。 CAN Bus 測試 本例程演示使用Linux socket CAN API,使用MYD-Y6ULX上的CAN總線接口發送和接收數據。 將can_send和can_receive拷貝至開發板。 執行以下步 驟: 硬件連接 MYD-Y6ULX開發板有一個CAN總線接口(J10),將H,L信號線與另外的CAN通訊設備或USB CAN轉換器相連接。 軟件測試 配置開發板上CAN0通信波特率都設置為 50kbps,并使能CAN0設備 Linux上可以使用兩種工具來配置CAN設備,canconfig和ip,MYD-Y6ULX附帶的系統默認使用ip命令。 canconfig命令配置: # canconfig can0 bitrate 50000 ctrlmode triple-sampling on # canconfig can0 start ip命令配置 # ip link set can0 type can bitrate 50000 triple-sampling on # ifconfig can0 up CAN收發測試可以使用系統附帶的cansend、 candump命令,也可以使用資源包中CAN收發例程。 MYD-Y6ULX作為發送端: 使用cansend發送數據到CAN總線: # cansend can0 100#01.02.03.04.05.06.07.08 can_send例程運行后會一直發送數據,直到ctrl + c結束。 # ./can_send -d can0 -i 100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 其他設備作為接收端: 使用candump接收CAN數據: # candump can0 # can0 100 [8] 01 02 03 04 05 06 07 08 can_receive例程接收來自CAN總線的數據: # ./can_receive -d can0 can0 0x100 [8] 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 can0 0x100 [8] 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 can0 0x100 [8] 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 can0 0x100 [8] 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 Audio 測試 硬件連接 本例程演示使用Linux系統中的arecord/aplay命令對音頻接口錄音和放音。 需要使用兩頭3.5mm的音頻AUX線,從電腦音頻輸出孔和開發板的LINE IN(J5)接口連接,HEADERPHONE(J4)連接耳機。 軟件操作 在電腦中播放音頻文件,執行arecord命令會先將LINE IN中的音頻錄制并保存為test.wav文件。 運行一分鐘后再按ctrl + c來停止。 # arecord -f cd test.wav 執行aplay命令來播放上面錄制好的音頻文件。 # aplay test.wav CAMERA 測試 MYD-Y6ULX上提供一個并行Camera接口(J9),可以連接MY-CAM011B型號的Camera模塊,模塊之間使用FPC線連接。 由于信號序列影響,請勿直接 將其它型號的Camera的模塊插入,否則會引起模塊或開發板的損壞。 本例程演示使用一款開源的視頻流軟件uvc_stream,可以將Camera設備捕捉的數據顯示在web頁面。 硬件連接 使用FPC數據線將MYB-CAM011B模塊和MYD-Y6ULX板上的J9接口相連接。 軟件操作 uvc_stream是通過的網絡傳輸數據,需要先設置好MYD-Y6ULX板的以太網IP地址,對應系統中的eth0設備。 Linux系統中的MY-CAM011B模塊的設 備,可通通過v4l2-ctl命令來查詢到,輸出信息的i.MX6S_CSI表示Camera控制器,對應設備是/dev/video1。 uvc_stream參數中'-y'是使用yuyv方 式,'-P'后面是設置web界面的登錄密碼,用戶名默認為uvc_user。 '-r'是指定分辨率,當前僅支持800x600。 可以用ctrl + c來停止。 # ifconfig eth1 192.168.1.42 # v4l2-ctl --list-devices i.MX6S_CSI (platform:21c4000.csi): /dev/video1 pxp (pxp_v4l2): /dev/video0 # ./uvc_stream -d /dev/video1 -y -P 123456 -r 800x600 uvc_stream提供兩種web功能,snapshot和streaming。 snapshot的請求URL是snapshot.jpeg,streaming的請求URL是stream.mjpeg。 PC和開發板 在同一網絡內時,打開流覽器,輸入地址:,可以看到有登錄框,輸入用戶名為uvc_user,密碼為 123456,就可以看到從MY-CAM011B實時采集到的圖像了。 wifi測試 MYD-Y6ULX開發板提供一個WiFi模塊(J11),支持Client模式。 硬件連接 將附帶SMA接口的天線安裝在開發板的J12位置。 Client模式 Client模式是用于將WiFi模塊作為客戶端設備,主動連接于路由器或其它提供無線熱點的設備。 系統中已經加入WiFi模塊的驅動,啟動后會自動加載相應驅動。 驅動加載成功后會出現對應的wlan0網絡設備,使用ifconfig命令來確認。 # ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr a0:2c:36:60:ee:e0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3388 errors:0 dropped:10 overruns:0 frame:0 TX packets:37 errors:0 dropped:3 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:395459 (386.1 KiB) TX bytes:6074 (5.9 KiB) 下面使用wpa_passphrase生成對應WiFi熱點SSID的密碼,然后由wpa_supplicant命令實現WiFi模塊與WiFi熱點的連接。 # wpa_passphrase "MYiRTech" >> wifi.conf 12345678 # cat wifi.conf network={ ssid="MYiRTech" #psk="12345678" psk=b96d9a5de2d9480ad5f987857e20216b47a0c4bf43397825ba909438bc52aaff } # wpa_supplicant -D wext -B -i wlan0 -c wifi.conf Successfully initialized wpa_supplicant rfkill: Cannot open RFKILL control device R8188EU: Firmware Version 11, SubVersion 1, Signature 0x88e1 MAC Address = a0:2c:36:60:ee:e0 IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready ioctl[SIOCSIWAP]: Operation not permitted R8188EU: INFO indicate disassoc 連接成功后,使用udhcpc獲取IP地址后,就可以使用了。 # udhcpc -b -i wlan0 -R # ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr a0:2c:36:60:ee:e0 inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5577 errors:0 dropped:15 overruns:0 frame:0 TX packets:46 errors:0 dropped:3 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:651690 (636.4 KiB) TX bytes:7472 (7.2 KiB) 4G模塊 測試 MYD-Y6ULX開發板提供一個支持4G模塊的PCI-E插槽,此插槽使用USB數據線與4G模塊通訊。 當前僅支持移遠EC20型號。 注意:移遠EC20模塊為選購配件,請向米爾科技購買。 硬件連接 安裝移遠EC20模塊到PCI-E插槽(U12)。 將兩頭I-PEX接口的天線安裝在移遠EC20模塊和開發板的J25位置。 安裝SMA天線到開發板的J24位置。 系統中已經加入4G模塊的驅動,啟動后會自動加載相應驅動,驅動加載成功后會出現對應的/dev/ttyUSB*設備,查看: |