专栏中心

EEPW首页 > 专栏 > ARM嵌入式系统串口扩展

ARM嵌入式系统串口扩展

发布人:toradex 时间:2016-03-22 来源:工程师 发布文章

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 中可以和其他串口一样正常使用。

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

TI:氮化镓赋能人形机器人高效电机关节

利用 AccelDSP 和 System Generator for DSP™ 加快 FPGA 设计

视频 2010-05-06

TV信号转VGA信号电路图

资源下载 2007-12-30

TMS320LF2407DSP典型用户板原理图

利用 Spartan-3 PCIe 入门套件实现的系统性能演示

视频 2010-05-06

源来如此 | 如何设计高电压 DCM 反向电荷泵转换器

T2PAK封装应用笔记:换流回路设计建议

探索适用于BMS设计的高效主动均衡解决方案

深入探讨BMS中的主动均衡

利用 ISE 和 System Generator for DSP 10.1 提高 DSP 设计生产率

视频 2010-05-06

Rapidus获17 亿美元融资,用于2纳米芯片量产

EDA/PCB 2026-02-28

告别指尖采血:动态血糖仪(CGM)如何改变生活

医疗电子 2026-02-28

Spartan-3 PCI Express 入门套件

视频 2010-05-06

利用 ISE Design Suite 11 内的 Base System Builder

视频 2010-05-06

T2PAK封装应用笔记:通过特定方法验证T2PAK散热设计的有效性

usb转232电路

资源下载 2007-12-30

安森美工业LDO选型指南,电源工程师案头必备

IMEC研发新型曝光后烘烤工艺,提速EUV设备并提升先进芯片产能

USB转并口、串口电路图(ch341).

ID卡考勤机电路

更多 培训课堂
更多 焦点
更多 视频

技术专区