龙芯CAN测试(sja1000)

测试方案

  1. CAN0和CAN1相连,互相收发数据。连接方式如下图:

龙芯CAN测试(sja1000)_第1张图片

  1. 使用扩展模式CAN1发送数据CAN0接收数据。
  2. 使用标准模式CAN1发送数据CAN0接收数据。
  3. 使用EJTAG中bin文件夹内的can.c代码,使用callbin的方式测试CAN的收发。Can.c中CAN默认工作在扩展模式。当测试CAN的标准模式时需要对代码进行如下修改。

软件流程

  1. 设置控制器进入复位模式
    1. 检测到有复位请求后将中止当前接收/发送的信息而进入复位模式,一旦向复位位传送了 1-0 的下降沿 CAN 控制器将返回工作模式
  2. 设置总线定时。
    1. 总线定时0寄存器对应BTR0
    2. 总线定时1寄存器对应BTR1
  3. 设置标准模式还是扩展模式
    1. 向偏移地址为1的寄存器写0x81则为扩展模式
    2. 向偏移地址为1的寄存器写0x1则为标准模式
  4. 设置过滤,当消息的ID与上验收屏蔽值等于验收代码与上验收屏蔽值时,控制器接收消息。
    1. 扩展模式,设置寄存器偏移地址为16~23的寄存器,下图红色方框中。

龙芯CAN测试(sja1000)_第2张图片

  1. 标准模式,设置寄存器偏移地址为4、5的寄存器

  1. 向控制寄存器的RRbit写0,进入正常工作模式。
  2. 使能中断
    1. 扩展模式:向偏移地址为4的寄存器写入0xff。
    2. 标准模式:向控制寄存器写入0x1e打开中断。
  3. 发送数据
    1. 扩展模式:将发送的数据写入如下图所示寄存器。

龙芯CAN测试(sja1000)_第3张图片

  1. 标准模式:将发送的数据写入如下图所示寄存器。

龙芯CAN测试(sja1000)_第4张图片

  1. 需要保证发送的帧不被接受端所过滤掉。
  1. 发送数据:数据写入后,将命令寄存器的TR置1。
    1. 两种模式操作相同。
  2. 接收数据:查询中断寄存器的RI接收中断是否为1。为1则说明接收到数据。
    1. 两种模式操作相同。
  3. 读取接收的数据
    1. 扩展模式

龙芯CAN测试(sja1000)_第5张图片

  1. 标准模式

龙芯CAN测试(sja1000)_第6张图片

注意

CAN在每次发送/接收数据后需要复位。

CAN的两种帧格式

龙芯CAN测试(sja1000)_第7张图片

龙芯CAN测试(sja1000)_第8张图片

你可能感兴趣的:(龙芯CAN测试(sja1000))