ZHCAFI0 July   2025 MSPM0G3507

 

  1.   1
  2.   商标
  3. 1简介
    1. 1.1 支持的功能
    2. 1.2 CAN 帧格式
    3. 1.3 SPI 消息帧格式
  4. 2实施
    1. 2.1 SPI 消息格式
      1. 2.1.1 SPI 命令
      2. 2.1.2 指令集
    2. 2.2 超时特性
    3. 2.3 错误指示
    4. 2.4 忙状态指示
    5. 2.5 消息 RAM 配置
    6. 2.6 测试环境
  5. 3参考资料

指令集

位修改指令

MSPM0G3507 位修改指令格式图 2-2 位修改指令格式

操作码:0b0000000000010000

位修改指令用于设置或清除特定 CAN 寄存器中的单个位。掩码位决定寄存器中哪些位可以更改。掩码位 1 允许更改寄存器中的相应位,而掩码位 0 则阻止更改寄存器中的相应位。

复位指令

MSPM0G3507 复位指令格式图 2-3 复位指令格式

操作码:0b0000000000100000

复位指令可复位 SPI - CAN 桥接器器件中的 CAN 模块。若要复位 CAN 模块,则用户需要通过 SPI 协议发送相应的操作码。

电源使能和 CAN 配置指令:

MSPM0G3507 电源使能和 CAN 配置指令格式图 2-4 电源使能和 CAN 配置指令格式

操作码:0b0000000000110000

电源使能和 CAN 配置指令用于为桥接器件中的 CAN 模块供电。此外,一旦启用 CAN 模块,就可完成预定义的 CAN 消息 RAM 配置。

加载 TX 缓冲区指令:

MSPM0G3507 加载 TX 缓冲区指令格式图 2-5 加载 TX 缓冲区指令格式

操作码:0b00000000010000ab

加载 TX 缓冲区指令用于将 CAN 帧加载到所选发送缓冲区。发送缓冲区的选择可在操作码中编码。可根据指令字段中的 a、b 位选择四个发送缓冲区之一。

表 2-2 加载 TX 缓冲区映射
a b 缓冲区
0 0 缓冲区 – 0
0 1 缓冲区 – 1
1 0 缓冲区 – 2
1 1 缓冲区 – 3

加载 TX FIFO 指令:

MSPM0G3507 加载 TX FIFO 指令图 2-6 加载 TX FIFO 指令

操作码:0b0000000001010000

加载 TX FIFO 指令用于将要发送的 CAN 帧加载到发送 FIFO 中。在将 CAN 帧加载到发送 FIFO 之前,用户必须确保发送 FIFO 未满。

请求发送 TX 缓冲区指令

MSPM0G3507 请求发送 TX 缓冲区指令格式图 2-7 请求发送 TX 缓冲区指令格式

操作码:0b00000000011000ab

请求发送 TX 缓冲区指令为四个发送缓冲区之一添加发送请求。发送缓冲区的选择可在操作码中编码。可根据指令字段中的 a、b 位选择四个发送缓冲区之一。

表 2-3 请求发送 TX 缓冲区映射
a b 缓冲区
0 0 缓冲区 – 0
0 1 缓冲区 – 1
1 0 缓冲区 – 2
1 1 缓冲区 – 3

请求发送 TXFIFO 指令

MSPM0G3507 请求发送 TXFIFO 指令格式图 2-8 请求发送 TXFIFO 指令格式

操作码:0b0000000001110000

请求发送 TX FIFO 指令根据发送 FIFO Put 索引为其中一个发送 FIFO 元素添加发送请求。在发送缓冲区添加请求之前,用户需确保发送 FIFO 有一个 CAN 帧。

写入寄存器指令

MSPM0G3507 写入寄存器指令格式图 2-9 写入寄存器指令格式

操作码:0b0000000010000000

偏移地址 – 指向要写入寄存器数据的寄存器地址。

写入寄存器指令用于通过 SPI 外设配置 CAN 寄存器。根据偏移地址将数据写入相应的寄存器。

读取寄存器数据指令:

MSPM0G3507 读取寄存器数据指令格式图 2-10 读取寄存器数据指令格式

操作码:0b0000000010000000

偏移地址 - 指向要读取寄存器数据的寄存器地址。

读取寄存器数据指令用于从特定 CAN 寄存器中读取数据。读取寄存器数据指令只读取寄存器,但不发送。因此,每条读寄存器数据指令之后必须有一条获取寄存器数据指令。

获取寄存器数据指令:

MSPM0G3507 获取寄存器数据指令格式图 2-11 获取寄存器数据指令格式

操作码:0b0000000010100000

获取寄存器数据指令会传输使用读取寄存器数据指令读取的寄存器值。

读取 RX 缓冲区数据指令:

MSPM0G3507 读取 RX 缓冲区数据指令格式图 2-12 读取 RX 缓冲区数据指令格式

操作码:0b00000000101100xy

当 SPI-CAN 桥接器从 CAN 网络接收到新的 CAN 帧时,SPI-CAN 桥接器会切换 GPIO 引脚(如 图 2-12 所示),以向 SPI 控制器表示接收到该帧。

要从 SPI-CAN 桥接器中的 CAN 模块 RX 缓冲区检索已接收的 CAN 帧,必须遵循以下顺序:

  1. 首先,使用读取 RX 状态数据指令,然后使用获取 RX 状态数据指令来识别哪个 RX 缓冲区包含接收到的 CAN 帧。
  2. 然后,执行读取 RX 缓冲区指令以访问缓冲区内容。请注意,该指令只读取缓冲区位置,并不传输数据。
  3. 最后,执行获取 RX 缓冲区数据指令,以从缓冲区实际检索数据。

每个读取 RX 缓冲区指令必须与相应的获取 RX 缓冲区数据指令配对,才能完成数据传输。

RX 缓冲区选择可在操作码中进行编码。可根据指令中的 x、y 位从四个 RX 缓冲区中选择一个。

表 2-4 读取 RX 缓冲区映射
X y 缓冲区
0 0 缓冲区 – 0
0 1 缓冲区 – 1
1 0 缓冲区 – 2
1 1 缓冲区 – 3

获取 RX 缓冲区数据指令

MSPM0G3507 获取 RX 缓冲区数据指令格式图 2-13 获取 RX 缓冲区数据指令格式

操作码:0b0000000011000000

获取 RX 缓冲区数据指令传输使用读取 RX 缓冲区指令读取的 RX 缓冲区数据。

读取 RX FIFO 数据指令:

MSPM0G3507 读取 RXFIFO 数据指令格式图 2-14 读取 RXFIFO 数据指令格式

操作码:0b0000000011010000

当 SPI-CAN 桥接器从 CAN 网络接收到新的 CAN 帧时,SPI-CAN 桥接器会切换 GPIO 引脚(如 图 2-14 所示),以向 SPI 控制器表示接收到该帧。

要从 SPI-CAN 桥接器的 CAN 模块 RX FIFO 中获取已接收的 CAN 帧,必须遵循以下顺序:

  1. 首先,使用读取 RX 状态数据指令,然后使用获取 RX 状态数据指令来获取有关 RXFIFO 状态的信息。
  2. 然后,执行读取 RX FIFO 数据指令以访问 FIFO 元素的内容。根据 RX FIFO Get 索引,选择 Rx FIFO 元素,并将数据读取并存储在数组中。请注意,该指令只读取 FIFO 元素位置,并不传输数据。
  3. 最后,执行获取 RX FIFO 数据指令,以从 FIFO 中实际检索数据。

获取 RX FIFO 数据指令:

MSPM0G3507 获取 RXFIFO 数据指令格式图 2-15 获取 RXFIFO 数据指令格式

操作码:0b0000000011100000

获取 RX FIFO 数据指令发送使用读取 RX FIFO 指令读取的 RX FIFO 数据。

读取接收状态数据指令

MSPM0G3507 读取接收状态数据指令格式图 2-16 读取接收状态数据指令格式

操作码:0b0000000011110000

读取接收状态数据指令用于从 SPI 向 CAN 设备获取 CAN 模块的状态位。作为对该指令的响应而接收的数据位的含义如 图 2-17 所示。

MSPM0G3507 状态位指示图 2-17 状态位指示
  • B0 – B4:来自 NDAT 寄存器的 RX 缓冲区新数据状态。每个位指示对应 RX 缓冲区的状态。1:相应的 Rx 缓冲区具有 CAN 帧。0:相应的 Rx 缓冲区为空。
  • FL:指示 CAN RXFIFO 满标志状态。1:RXFIFO 已满。0:RXFIFO 未满。
  • F2、F1、F0:指示 CAN RXFIFO 填充级别。1:相应的 Rx FIFO 具有 CAN 帧。0:相应的 Rx FIFO 为空。
  • L2、L1、L0:指示 CAN 协议中的 LEC(最后错误代码)位。
    表 2-5 最后错误代码 (LEC) 位诊断映射
    LEC 位[L2、L1、L0] 错误代码
    000 无错误
    001 填充错误
    010 格式错误
    011 应答错误
    100 Bit1 误差
    101 Bit0 误差
    110 CRC 误差
    111 没有变化
  • D2、D1、D0:指示 CAN 协议中的 DLEC(数据段最后错误代码)位。错误代码与 LEC 相同。
  • ES:指示上一条指令的错误状态。1:接收上一条指令时出错。0:接收上一条指令时无错误。
  • TO:上一条指令的超时状态。1:上一条指令发生超时。0:上一条指令未发生超时

获取接收状态数据指令

MSPM0G3507 获取接收状态数据指令格式图 2-18 获取接收状态数据指令格式

操作码:0b0000000000001000

获取 RX 状态数据指令用于接收已通过读取 RX 状态数据指令读取并存储在变量中的 RX 状态数据。