ARM嵌入式系统串口扩展_技术文章_行业资讯_武汉华和机电技术有限公司
设为首页 | 加入收藏 | 联系我们
  • 解决方案
  • 杆塔betway体育
  • 机械安控
  • 扬尘betway体育
  • 边坡betway体育
  • 大坝betway体育
  • 高支模betway体育
  • 基坑betway体育
  • 建筑betway体育
  • 桥梁betway体育
  • 隧道betway体育
  • 成功案例
  • 服务中心
  • 个性服务
  • 技术支持
  • 资源下载
  • 关于华和
  • 华和介绍
  • 华和历程
  • 联系华和
  • 人才招聘
  • 行业资讯
    information center
    技术文章
    当前位置:首页 > 行业资讯 > 技术文章
    ARM嵌入式系统串口扩展
    作者:华和技术 点击量: 发布时间:2016-03-30

      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 平台上。驱动源码下载地址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-nextgit://git.toradex.com/linux-toradex.git

     

        b). 交叉编译工具下载

    $ wgethttp://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 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=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 (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)顺应市场发展趋势,作为智能硬件一站式解决方案提供者,基于低功耗嵌入式平台专注采集、控制、通讯一站式解决智能硬件研发,坚持以持续)创新为客户不断创造独有价值。成功案例遍布检测betway体育仪器、环境工程与自然、工业控制与自动化、智能交通能源、北斗位置服务、国防及医疗电子等领域。致力于通过方案开发帮助客户:缩短开发周期,降低开发成本,提高投资效率。致力于通过技术服务、项目管理和集成化的采购、生产帮助客户提高供货质量和降低企业运营成本。


    华和技术(WONHERE)有十余年的嵌入式项目研发及管理经验,团队致力于平台级产品的研发和检测、betway体育、控制类系统方案的项目定制。华和技术是武汉大学研究生培养基地、湖北省仪器仪表学会理事单位,拥有嵌入式系统开发领域的多项知识产权。华和技术以打造中国低功耗嵌入式平台、物联网智能硬件开发及技术支持中心为使命。我们的产品有:ARM335x嵌入式板卡、ARM3530嵌入式板卡、ARM3730嵌入式板卡,X86嵌入式平台、Power PC嵌入式平台,以及仪器仪表、环境工程、智能装备、智能交通、行业嵌入式系统方案。产品咨询请与华和技术(WONHERE)联系。