ARM嵌入式系統常常會遇到多串口應用需求,而ARM芯片系統原生的UART數目有限,因此就需要通過其他高速總線來擴展更多的接口。本文就以Toradex 基于NXPi.MX6D/6Q處理器的Apalis i.MX6D/Q ARM計算機模塊,在Linux系統下通過EXAR方案擴展8路串口。
Apalis i.MX6D/Q模塊自身最多可以支持 5 個 UART 串口輸出。兼容高速TIA/EIA-232F( 5Mbit/s)。支持7、8 或者 9(用于RS485)位數據,1或者2位停止位。其中 UART1 為全功能串口,其余部分串口也可支持 RTS和CTS 信號。
在 Linux 系統中一般會保留一個串口用于應用調試開發以及系統升級。雖然 SSH 等功能也可以用于遠程網絡訪問以及系統調試,但是對于嵌入式產品,系統啟動時,特別是 Uboot 啟動的信息,可以有助于功能調試以及問題定位。而這部分信息只能從串口輸出。Toradex 模塊在更新Linux BSP 的時候也同樣需要在 Uboot 進行。
Apalis i.MX6Q/D 模塊剩余的4個串口,除了可以使用TTL 電平直接控制相應的外設,也可以擴展為 RS232/RS485/RS422 常用的工業控制端口。對于更多串口的需求,目前有多種方案實現串口擴展,例如通過 USB、SPI、Memory Bus、I2C以及 PCIe 等總線。 Memory Bus 和 PCIe 相對于其他總線具有更高的實時性,在同一個接口上也能夠擴展出更多的串口。對于串口數量以及數據實時性較高的應用可以優先選擇這兩種擴展方案。與此同時, Memory Bus 和 PCIe 屬于高速信號總線,在 PCB 布線方面需要一些特殊考慮。Toradex 為此也提供了免費的 PCB 設計指導。下面我們就將介紹如何使用 EXAR 基于 PCIe 總線的XR17V358方案,擴展 8 路串口。
1). XR17V358方案簡介及驅動下載
XR17V358 擴展的 8 個串口均支持RTS/CTS 或者 DTR/DSR 流控功能,每個串口帶有 256 字節的 FIFO,獨立時鐘輸出,支持半雙工 RS485,傳輸速度為 25 Mbps 。XR17V358 使用 PCIe 2.0 Gen 1 與 Apalis i.MX6Q/D 相連接,保證高速實時地數據傳輸。EXAR 目前為 XR17V358 提供了 Windows 和 Linux 驅動。這里我們采用其的 Linux 驅動,并移植到 Apalis i.MX6 平臺上。驅動源碼下載地址/common/content/document.ashx?id=20121
2). 配置編譯環境
在編譯之前,還需要下載 Apalis i.MX6 的 Linux 內核以及交叉編譯工具。
a). Apalis i.MX6 的 Linux 內核下載
$ git clone -b toradex_imx_3.14.28_1.0.0_ga-nextgit://git.toradex.com/linux-toradex.git
b). 交叉編譯工具下載
$ wget/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz
$ tar xvfgcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz
$ ln -sgcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf gcc-linaro
$ export ARCH=arm
$ export PATH=~/gcc-linaro/bin/:$PATH
$ export CROSS_COMPILE=arm-linux-gnueabihf-
注意:上面的路徑需要對應交叉編譯工具實際解壓的目錄。
c). 編譯 Linux 內核,為XR17V358 提供必要的配置文件。
$ make apalis_imx6_defconfig
$ make -j4 uImage LOADADDR=
d). 編譯 XR17V358 驅動
// 編輯 Makefile 文件,將KERNEL_SRC 指向 Linux 內核所在目錄
KERNEL_SRC =/home/ban/Toradex/oe-core-tegra/LinuxKernel/v2.5/mx6/toradex_imx_3.14.28_1.0.0_ga-next/linux-toradex
// 保持后運行 make 命令進行編譯,確保上面提到的 ARCH、PATH和 CROSS_COMPILE 參數仍然有效。
$ make
// 編譯成功后會生成針對 ARM 處理器的內核模塊文件 xr17v35x.ko
$ file xr17v35x.ko
xr17v35x.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV),BuildID[sha1]=399121b7862105b185e24b45ba3522fe, not stripped
e). 安裝驅動
將 xr17v35x.ko 復制到 Apalis i.MX6 模塊上,并安裝
root@apalis-imx6:~# insmod xr17v35x.ko
[ 151.156648] Exar PCIe (XR17V35x) serial driver Revision: 2.0
root@apalis-imx6:~# lspci
00:00.0 PCI bridge: Device 16c3:abcd (rev01)
01:00.0 PCI bridge: PLX Technology, Inc.PEX 8605 PCI Express 4-port Gen2 Switch (rev aa)
02:01.0 PCI bridge: PLX Technology, Inc.PEX 8605 PCI Express 4-port Gen2 Switch (rev aa)
02:02.0 PCI bridge: PLX Technology, Inc.PEX 8605 PCI Express 4-port Gen2 Switch (rev aa)
02:03.0 PCI bridge: PLX Technology, Inc.PEX 8605 PCI Express 4-port Gen2 Switch (rev aa)
03:00.0 Serial controller: Exar Corp.Device 0358 (rev 03)
在 /dev 目錄下出現對應的串口設備文件 ttyXR0 至 ttyXR7。
root@apalis-imx6:/dev# ls
autofs network_latency tty18 tty60
block network_throughput tty19 tty61
bus null tty2 tty62
char port tty20 tty63
console ppp tty21 tty7
cpu_dma_latency ptmx tty22 tty8
cuse ptp0 tty23 tty9
disk pts tty24 ttyXR0
dri ram0 tty25 ttyXR1
fb ram1 tty26 ttyXR2
fb0 ram10 tty27 ttyXR3
fb1 ram11 tty28 ttyXR4
fb2 ram12 tty29 ttyXR5
fb3 ram13 tty3 ttyXR6
fd ram14 tty30 ttyXR7
f). 設置波特率
root@apalis-imx6:~# stty -F /dev/ttyXR0115200
驅動加載完畢后,在 Linux 中可以和其他串口一樣正常使用。
關于我們
華和技術(WONHERE)順應市場發展趨勢,作為智能硬件一站式解決方案提供者,基于低功耗嵌入式平臺專注采集、控制、通訊一站式解決智能硬件研發,堅持以持續)創新為客戶不斷創造價值。成功案例遍布檢測監測儀器、環境工程與自然、工業控制與自動化、智能交通能源、北斗位置服務、國防及醫療電子等領域。致力于通過方案開發幫助客戶:縮短開發周期,降低開發成本,提高投資效率。致力于通過技術服務、項目管理和集成化的采購、生產幫助客戶提高供貨質量和降低企業運營成本。
華和技術(WONHERE)有十余年的嵌入式項目研發及管理經驗,團隊致力于平臺級產品的研發和檢測、監測、控制類系統方案的項目定制。華和技術是武漢大學研究生培養基地、湖北省儀器儀表學會理事單位,擁有嵌入式系統開發領域的多項知識產權。華和技術以打造中國低功耗嵌入式平臺、物聯網智能硬件開發及技術支持中心為使命。我們的產品有:ARM335x嵌入式板卡、ARM3530嵌入式板卡、ARM3730嵌入式板卡,X86嵌入式平臺、Power PC嵌入式平臺,以及儀器儀表、環境工程、智能裝備、智能交通、行業嵌入式系統方案。產品咨詢請與華和技術(WONHERE)聯系。