基于S3C2410的CAN总线通信设计与开发
if ( DCOL ) return ( -1 );
// 判断是否发生冲突,发生冲突则返回错误标准
else while( !REDY );
// 否则等待数据发送完成
return ( 0 ); // 返回发送成功标准
}
对MCP2515的读写函数原型如下:
void Mcp_Read( unsigned char Addr, unsigned char *ReadData, unsigned char Length );
void Mcp_Write( unsigned char Addr, unsigned char *WriteData, unsigned char Length );
Addr:要读写区域的首地址;
ReadData/WriteData:读取数据存放区、写出数据缓冲区首地址;
Length:要读、写数据的字节数。
其它对MCP2515的操作在此不一一列举,请见参考文献[3]。
3.2 CAN总线数据收发软件设计
本设计采用外部中断1响应MCP2515的总中断,并且配置控制器始终处于唤醒模式,发送器工作在正常模式,使能接收、发送、错误中断。中断方式处理CAN总线数据收发的流程如图3,分别从发送处理、接收处理、错误处理三个部分加以说明。
图3 中断方式实现CAN总线数据收发流程图
(1) 发送处理
在两种情况会下被执行,其一发送中断响应中,如果当前有发送任务,通过发送缓冲区记录标志确定空的发生缓冲区并向其中填发送帧,然后启动发送;其二在接收中断响应中,在接收处理完后如果有发送任务且有发送缓冲区空,会处理发送任务。在两处处理发送主要是考虑有多个发送、接收缓冲区可用,可以提高通信效率。
(2) 接收处理
需要根据ICOD的值来确定当前是那个接收缓冲区的数据准备好,可以读取。接收帧处理过程中首先读取帧的ID值,确定当前帧的数据是那个节点发送来的,并据此把帧中数据字段的数据存放相应的位置。
(3) 错误处理
引起错误处理的原因很多,并且都产生错误中断,需要访问错误标志寄存器来确定具体错误类型,并据此作相应的处理。
此外,图3中更新发送缓冲区使用记录是为了在发送和接收中断响应中可以据此清楚发送缓冲区的使用情况,确定当前是否可以做发送处理。
4 测试与应用
将以上设计方案应用到自主开发的HMI(结构框图如图4,虚线框中为扩展的CAN总线接口框图)实验板上,同时与黄石市科威自控有限公司开发的混合型PLC(EASY-M0808R-A44NB)、通用型PLC(EASY-M2416R)、运动控制器(EASY-KP3-M0506R)进行通信测试,其中HMI作主站,其他设备作从站。测试环境中有电机频繁启停和不间断继电器开闭干扰,其他测试条件和参数见如附表:
附表 CAN接口测试记录表
在测试记录程序中记录了通讯速率为500Kbps,运行到6时31分42秒时出现了一次通信"死机",随后系统调用自恢复程序重新配置软硬件参数,6时31分43秒重启通信,通信恢复正常。其他测试条件下没有出现"死机"的情况。该测试结果说明采用这种方法设计的CAN接口完全能够满足工业现场网络通讯的要求。
图4 HMI系统结构图
5 结束语
采用ARM芯片S3C2410集成的SPI接口扩展的CAN总线接口,在不改变CAN总线自身的特点的前提下,使得PCB布线简单,增强了系统的可靠性;为扩展接口找到了一个便捷的方法。在自主开发的HMI中采用该设计方案实现CAN总线接口的扩展,并且在实际应用和测试中证明了该方案的正确性和可靠性。
- 一种S3C2410路由器的整体结构及工作原理(03-03)
- GPRS远程安防监控系统的电路设计(10-23)
- 嵌入式无线监测仪系统电路设计详解(06-21)
- CAN总线镍氢电池管理解决方案(04-23)
- CAN总线在机车监控系统中的应用(04-04)
- 基于can总线技术的电子控制系统单元在汽车网络系统中的应用(07-16)