利用TL16C554和SJA1000芯片实现4路UART总线与CAN总线的通讯设计

接口/总线/驱动

1143人已加入

描述

由于在消费类电子产品、计算机外设、汽车和工业应用中增加了嵌入式功能,对低成本、高速和高可靠通信介质的要求也不断增长,以满足这些应用,其结果是越来越多的处理器和控制器用不同类型的总线集成在一起,实现与PC软件、开发系统或网络中其他设备的通信。微处理器中常用的集成串行总线是通用异步接收器传输总线、串行通信接口以及车用串行总线,包括控制器局域网(CAN)。这些总线在速度、物理接口要求和通信方法学上都有所不同。本文主要利用TI公司的多路异步收发器TL16C554和PHILIPS公司的SJA1000实现一个4路UART总线与CAN总线之间的相互通讯过程。

1、UART与CAN介绍

UART模块采用TI公司的TL16C554,它是含有4路16C550的增强型异步通讯电路,每路通道能从外围设备或MODEM接收数据,实现串并转换;同时,也可以从CPU端接收数据,实现并串转换。TL16C554内部具有16 B的接收和发送FIFO,在FIFO模式下,通过使用RTS和CTS输入信号可以自动控制串行数据流,可选的自动流控制特性大大降低了软件规模,提高了系统效率。TL16C554也可以通过FIFO触发点与TXRDY或RXRDY信号实现DMA模式的数据传输,片内的状态寄存器为用户提供错误指示、器件的工作状态和调制解调器接口控制。可通过调整系统中断来满足用户的要求,内部的环回模式实现了片内的故障诊断。TL16C554电路的串行数据格式为:

收发器

这些数据格式主要通过电路的线控制寄存器来进行控制,其中起始位为低电平“0”;数据位长度可选择5~8位;奇偶校验位可选择为奇校验、偶校验或无校验;停止位可选择1位、2位或1/2位。

CAN模块采用一种独立的CAN控制器SJA1000,主要用于移动目标和一般工业环境中的区域网络控制,是PHILIPS公司半导体PCA82C200CAN控制器的替代产品。SJA1000具有BasicCAN和PeliCAN 2种工作方式。BasicCAN模式是上电后默认的操作模式,而PeliCAN模式是新的操作模式,它能够处理所有CAN2.0B规范的帧类型,而且它还提供一些增强功能,使SJA1000能应用于更宽的领域。

其中SJA1000的数据帧格式为:

收发器

2、系统设计

系统总体电路图如图1所示,主要有3个部分组成,UART模块、CAN模块和微控制处理器。UART模块采用TI公司的TL16C554,它是一个4路通用异步收发器,每路均能从外围设备或MODEM接收串行数据,实现串一并转换;同时,它也可以从CPU端接收数据,实现并一串转换。

收发器

CAN模块采用PHILIPS公司的SJA1000,它是一种独立的CAN控制器兼容CAN2.0A和CAN2.0B两种技术规范。微控制器采用8位单片机AT89S 51,主要对UART模块和CAN模块进行初始化控制,并产生串行数据输送给UART模块。

2.1 UART模块通讯设计

UART模块通讯设计主要利用单片机控制4路异步收发器TL16C554。单片机首先通过数据线D7~D0、地址线A2~A0初始化TL16C554,配置好串行传输波特率、字符格式以及中断控制信号等寄存器,并通过4路通道的片选信号CSA,CSB,CSC和CSD选通其中的一路。利用单片机自身的串行接口发送串行数据,送入TL16C554,UART模块接收到串行数据后,将其转换成并行数据存入FIFO中,并通知单片机数据转换完成,单片机从UART模块的FIFO中读取数据,并准备好发送给CAN模块。通讯流程图如图2所示。

收发器

如果要实现多路UART总线与CAN总线通讯,利用通道各自的片选信号进行控制,在一路通道转换结束后再进行选通另一路通道,相互之间必须进行分时操作,协调处理。

2.2 CAN模块通讯设计

CAN模块通讯设计主要利用单片机控制SJA1000控制器。单片机首选通过地址数据复用线AD7~AD0对SJA1000进行初始化设置,包括时钟分频寄存器、输出控制寄存器、总线定时寄存器和验收滤波器等,通过这些寄存器可以设置选择工作模式为BasicCAN或是PeliCAN,CLKOUT引脚的频率、以及通信波特率等。设置好寄存器,就等待单片机将从UART模块读取的数据发送给SJA1000的发送缓冲器,CAN模块将这些数据转换成CAN总线形式并通过收发器发送到网络节点中去。通讯流程图如图3所示。

收发器

2.3 通讯过程

系统通讯电路图如图1所示,为了能实现UART与CAN之间的相互通讯,采用2个图1所示的电路图,将CAN收发器的CANH,CANL连接在一起,形成2个CAN节点,如图4所示。这样就能实现UART→CAN→CAN→UART的通讯过程。在节点1中,单片机首先发送8个串行数据55,56,…,5B.5C(16进制)送给TL16C554的串行通道,UART模块接收到串行数据后由SJA1000转换成CAN总线数据A1,A2,A3,A0,08,55,56,…,5C,65,61(16进制),其中A1,A2,A3,A0,08为PeliCAN模式下的识别码和帧信息,65,61为CRC校验码。转换成CAN总线后通过CANH、CANL将数据送入节点2的CAN模块,SJA1000接收到数据后由TL16C554转换成串行数据88,A1,A2,A3,A0,55,56,…,5B,5C(16进制)发送出去,其中88,A1,A2,A3,A0为帧信息和识别码。示波器采集的通讯波形图如图5所示。

收发器

为了能使转换结果更清楚的显示,将TL16C554的TXA通过RS 232串行数据线连接到PC机,硬件连接如图6所示。这样最终转换的UART数据就可以通过PC机显示出来,结果如图7所示。

收发器

3、 结语

本文设计了一个多路UART总线与CAN总线进行相互通讯的转换系统,从测试结果来看,该没计系统完全可以实现两者间的透明转换。利用CAN总线传输距离长、通讯灵活等优点,该系统可以有效的延长UART串行总线的通讯距离、提高传输速率,大大方便了具有UART接口的设备进行远距离、多节点传输。

责任编辑:gt

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分