原创 ARM嵌入式系统串口扩展

2016-3-22 15:38 1320 28 31 分类: 消费电子

ARM嵌入式系统常常会遇到多串口应用需求,而ARM芯片系统原生的UART数目有限,因此就需要通过其他高速总线来扩展更多的接口。本文就以Toradex 基于NXP i.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 平台上。驱动源码下载地址 http://www.exar.com/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-next git://git.toradex.com/linux-toradex.git

 

b). 交叉编译工具下载

$ wget http://releases.linaro.org/14.11/components/toolchain/binaries/arm-linux-gnueabihf/gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ tar xvf gcc-linaro-4.9-2014.11-x86_64_arm-linux-gnueabihf.tar.xz

$ ln -s gcc-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=10008000

 

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]=399121b7862105b185e24b45ba3522f14158295e, 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 (rev 01)

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/ttyXR0 115200

驱动加载完毕后,在 Linux 中可以和其他串口一样正常使用。

文章评论3条评论)

登录后参与讨论

用户1417636 2016-3-23 13:42

是个不错的选择,不过我们在这个平台上使用的是USB2UART bridge扩展,使用pcie确实可以节省两个USB端口出来

用户1454308 2016-3-23 10:40

Good

用户1678053 2016-3-23 09:01

看看

用户1553537 2010-7-14 11:12

最大受益者是中国移动、中国联通,他们分到的钱最多。
为什么当年业绩疯狂增长时还搞增值服务去榨取用户的钱,又搞出第三方SP内容提供商。
运营商应该给客户提供一条指令,关掉所有的SP端口,就什么都搞定了。

用户724766 2010-7-3 11:06

好文,重温一次

Office furnitureoffice furniture

用户1551713 2010-5-31 17:35

rn en

用户724766 2010-5-31 17:01

确实相当可恶。但是又有什么办法???


UPS system manufacturer

用户805969 2010-5-19 10:29

咱們這是中國哦!
那有那麼容易效果,再說,商人都想轉錢;
有幾個公司能抑制自己的欲望呢!
我的手機還是聯通總公司搞活動送的,天天扣費
現在我把GPRS功能關掉了,他每天都自動發個什麼鬼信息,不過現在沒用啦!就只能打接電話,發信息

用户1545371 2010-5-11 14:57

中国法律多如牛毛,是否已有适用的商业诈骗法规?请法律界指点。
政府或者各地的消委会能否对几个大制作商进行公诉?是为民作主的大好机会。

用户807019 2010-5-10 13:37

希望有效果。
相关推荐阅读
hai.qin_651820742 2024-11-29 15:29
基于 NXP iMX8QM 运行 QNX
By Toradex胡珊逢简介嵌入式领域的部分应用对安全、可靠、实时性有切实的需求,在诸多实现该需求的方案中,QNX 是经行业验证的选择。在 QNX SDP 8.0 上 BlackBerry 推出了 ...
hai.qin_651820742 2024-11-12 10:33
Yocto Linux BSP7 新版本介绍
By Toradex胡珊逢简介Toradex 已经发布了适用于 Verdin/Apalis/Colibri 模块系列的 Linux BSP 7 版本,Yocto Project 升级到 scarthg...
hai.qin_651820742 2024-10-30 10:56
基于 NXP iMX8MP 平台简单测试 PySide6 应用
By Toradex秦海1). 简介Python binding 的 Qt GUI 库一直以来有两种,最初是由 Riverbank Computing 公司在 2000 年初发布,基于 Qt4 版本推...
hai.qin_651820742 2024-10-11 15:15
Verdin AM62使用CODESYS
By Toradex胡珊逢简介CODESYS 是基于 IEC 61131-3 的 PLC 开发工具,在工业控制、交通等领域中有着广泛的应用。文章将介绍如何在 Toradex 采用 TI AM62 So...
hai.qin_651820742 2024-09-18 18:07
Verdin AM62 引脚复用配置
By Toradex胡珊逢简介Verdin AM62 是 Toradex 基于 TI AM623/AM625 SoC 的 Arm 计算机模块。它最多提供 4 个 A53 和 1 个 M4F 处理器。这...
hai.qin_651820742 2024-09-18 17:48
TI AM62X Secure Boot 流程简述
By Toradex秦海1). 简介嵌入式设备对于网络安全的要求越来越高,而 Secure boot就是其中重要的一部分。 TI AM62X 处理器基于行业标准 X.509&nbs...
我要评论
3
28
关闭 站长推荐上一条 /2 下一条