CAN总线控制器SJA1000的使用

最近接手了一个项目,需要调试编写与CAN总线相关的程序,在这篇博客内做个记录。

关于CAN总线介绍就不说了,两根线CANH和CANL,配合参考电平进行高低比较判断信号值。CAN总线通常通过PCA82C250控制器接口来进行CAN总线差分信号的物理层接收发送,每一个判断之后的信号值会被送往CAN总线控制器SJA1000进行管理。这些单个的数据位bit将被整理成一个个字节的形式,存储在SJA1000内的接收缓存中,然后在用户的控制下从缓存中一个个读出,发送过程相反。

连接大致如图所示:(参考一个以FPGA为核心主控的板卡原理图)

这样到达用户端的数据已经是相对比较完整的了,只差把这些八位的字节组织成帧和包,进行解析完成通信。

那么SJA1000具体完成了哪些工作呢?

SJA1000的数据手册在下面:

https://download.csdn.net/download/Newbeil/12565085

如图所示为SJA1000内部的结构框图,可以发现SJA1000这块芯片内部主要由以下几个模块构成:

接口管理逻辑IML:作为SJA1000与微控制器的主要接口管理,解析来自微控制器的命令,实现对内部寄存器的索引、提供状态、中断等信号给微控制器。

接收缓存RXB:作为ACF和微控制器之间的接口,数据由ACF写入,由微控制器读出,13字节长,相当于内部64字节深度的RXFIFO的一个长度为13字节的窗口。

发送缓存TXB:作为微控制器和BSP之间的接口,数据由微控制器写入,由BSP读出,13字节长

接收过滤器ACF:顾名思义,决定了收到的数据是否能够被接收,涉及到的内部寄存器包括ACR和AMR。

位流处理器BSP:负责协调TXB、RXFIFO、CAN总线上的数据流,兼顾错误检测,仲裁,错误处理等功能

位时序逻辑BTL:负责处理CAN总线上数据信号的时序相关功能,可对单个位的采样点、采样数量进行可编程地控制(通过对内部地寄存器设置,BTR0和BTR1)

错误管理逻辑EML:配合BSP获得错误信息,然后告知IML

 

未完待续

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值