新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > CAN总线到Ethernet网的网关研究实现

CAN总线到Ethernet网的网关研究实现

作者:时间:2009-09-21来源:网络收藏


控制器协议模块
控制器协议转换模块程序主要由SJA1000的寄存器读、写程序,初始化程序和发送、接收程序5 个子程序组成。之所以要编写单独的SJA1000寄存器读、写子程序,这是由SX52 芯片只有I/O端口的特点所决定的。

(1) 读SJA1000 寄存器子程序Read()其过程为:Re引脚设为输出;CS片选清零;Rd引脚设为输出;输出地址;置位ALE;延时20 ns ;ALE位清零;Rd 引脚设为输入;/Read 位清零;读入数据;延时20ns ;/Read 位置位;CS片选置位;返回。

(2) 写SJA1000寄存器子程序CANWrite()其过程为:Re引脚设为输出;CS片选清零;置位ALE;Rd 引脚设为输出;输出地址;ALE位清零;/wr位清零;输出数据;延时20ns;CS片选置位; 返回。

(3) SJA1000初始化子程序CANInit()选用CAN2.0A协议构建CAN控制网络,对SJA1000的初始化主要完成控制寄存器CR、验收代码寄存器ACR、验收屏蔽寄存器AMR、定时寄存器BTR0,1和输出控制寄存器OCR的设置。

(4) 发送接收子程序txdsub(),rxdsub()发送子程序负责节点报文的发送,由CAN控制器SJA1000独立完成。主控制器SX52只需将数据缓冲区A中已按CAN2.0A协议格式组合成的一帧报文送入SJA1000 发送缓冲区中,然后将命令寄存器里的发送请求标志置位,即可发送报文。

接收子程序负责节点报文的接收。SJA1000自动接收发往该节点的数据并将收到的数据放到它的接收缓冲器中。SJA1000 的报文接收主要有两种方式:中断接收方式和查询接收方式。该系统采用查询接收方式。可以发送给主控制器SX52的接收信息由状态寄存器的接收缓冲器状态标志RBS和接收中断标志RI 标出。SX52将会把这一帧数据包存入数据缓冲区B中,然后释放接收缓冲器,再通知总调度程序,由总调度程序调用以太网控制器协议转换模块转发。

以太网控制器协议转换模块
以太网控制器协议转换模块主要负责从UDP数据包中解析出完整CAN协议报文,存入数据缓冲区A。同时,将数据缓冲区B中的完整CAN协议报文封装成UDP数据报后发送到以太网上。采用UDP协议是考虑到CAN 协议数据报为短帧形式(每个数据帧最多为8个字节),因为TCP协议要进行3次握手建立连接,这对网络来说无疑是一种资源的浪费。而UDP是无连接的传输,这样可以提高网络传输效率,同时,也减轻的处理任务。当然,UDP是不可靠的传输协议。为了提高通信的可靠性,在应用层建立回传校验机制,通过实验
测试表明这种方式是行之有效的。以太网控制器协议转换模块主要由若干个ARP、UDP协议的API函数组成。

TCP/IP应用层程序设计
基于以太网的高层通信协议一般采用TCP/IP协议。这里采用流行的SOCKET套接字编程,传输层协议选择UDP(用户数据报协议),通过VisualC++编写应用层程序。WinSock提供了对UDP的支持,通过UDP协议可以向指定IP 地址的发送CAN 协议数据,同时也可以从它接收CAN协议数据,发送和接收方处于相同的地位没有主次之分。利用CAsyncSocket类操纵无连接的数据发送较简单,首先生成一个本地套接口,然后利用int CAsyncSocket : : SendTo ( constvoid 3 1pBuf , int nBufLen , UINT nHostPort , LPCTSTR1pszHostAddress = NULL ,int nFlags = 0) 发送数据,intCAsyncSocket : : ReceiveFrom ( void 3 1pBuf , int nBufLen ,CString rSocketAddess ,UINT rSocketPort , intnFlags = 0) 接收数据。利用UDP 协议发送和接收都可以是双向的,即管理主机和SX52都可以发送和接收数据。在程序设计中,创建了一个CAsyncSocket 派生类CCanSocket ,该派生类CCanSocket 有若干成员函数,通过这些类成员函数,可以很方便地CAN到Internet 的通信。

结 论

  随着Internet技术的日益成熟测控系统网络和以太网将渐渐融合。CAN总线到Internet的互联网关的设计是一项具有重要意义的工作,它有非常广阔的应用前景。

tcp/ip相关文章:tcp/ip是什么



上一页 1 2 下一页

评论


相关推荐

技术专区

关闭