ZHCSQH8A September 2025 – October 2025 TCAN5102-Q1
ADVANCE INFORMATION
这是一个通过 SPI 发送和接收字节流的基础示例。一旦器件接收到 SPI 帧的所有字节(由 SPI 报头中指定的字节数确定)后,该器件将开始发送该 SPI 帧。本示例会存储接收到的 POCI 数据,以供后续回读。
| 参数 | 值 |
|---|---|
| CAN 帧格式 | 标准帧格式 |
| 要传输的字节 | 10B |
| SPI 通道 | 通道 2 |
| 将接收到的数据保存到 RX FIFO | 是 |
| SPI 字节流 | 0x11、0x22、0x33、0x44、0x55、0x66、0x77、0x88、0x99、0xAA |
下表显示了在 CAN 总线上传输的步骤和数据。总线的中央网关/控制器称为 ECU,TCAN 器件称为“响应器”。
| 步骤 | 发送器 | 数据 | 说明 |
|---|---|---|---|
| 1 | ECU (DLC = 16B) | 0x0C, 0x10, 0x10, 0x82, 0x0A, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0x00 |
ECU 请求将 10 字节写入寄存器 0x1010 (SPI TX FIFO),其中 SPI 报头的存储 = 1、SPI 通道 = 2 以及 SPI 帧长度为 10 字节。随后将 10 字节数据移入设备。由于CAN DLC 必须设为 16 字节来容纳这 15 字节数据,因此在末尾填充 1 字节 0x00。 |
| 2 | 响应器 | 0x0C, 0x01 | 响应器发回一个 OK 以确认已收到请求。 |
| 3 | SPI | PICO:0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA POCI:0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08、0x09、0x0A |
此时,响应器在 SPI 通道 2 上执行 10 字节的 SPI 传输。POCI 数据存储在 RX FIFO 中 |
| 4 | ECU | 0x43、0x10、0x0F | ECU 请求从寄存器 0x100F-0x1011(SPI_STATUS 和 SPI_RXFS)读取 3 字节数据。由于突发读取并非从 0x1010 (SPI RX FIFO) 开始,因此对应该寄存器的字节将填充为 0。对于未从 FIFO 开始的突发读取,其对应 FIFO 的字节将返回“0”。 |
| 5 | 响应器 | 0x43, 0x01, 0xCA, 0x00, 0x01 | 响应器返回寄存器 0x100F 的数据、寄存器 0x1010 的填充值 0 以及寄存器 0x1011 的数据。返回数据表明:TX FIFO 为空,RX FIFO 包含 1 个 SPI 帧,且 RX FIFO 的下一个元素包含 10 字节数据。ECU 根据该信息,将请求从器件读取 10 + 2(SPI 报头)字节数据。 |
| 6 | ECU | 0x4C、0x10、0x10 | ECU 请求从 RX FIFO 读取 12 字节(10 字节数据+ 2 字节报头) |
| 7 | 响应器 (DLC = 16B) | 0x4C, 0x01, 0x02, 0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x00, 0x00 |
响应器返回请求的 12 字节数据。SPI 报头字节表明:此为帧读取的起始,使用的是 SPI 通道 2,待读取的 SPI 数据为 10 字节(可容纳于整个 CAN 帧中)。由于能容纳该数据的最近 CAN DLC 为 16 字节,因此在末尾填充 2 字节数据。 |
| 步骤 | 发送器 | 数据 | 说明 |
|---|---|---|---|
| 1 | ECU (DLC = 8B) | 0x05, 0x10, 0x10, 0x02, 0x0A, 0x11, 0x22, 0x33 |
ECU 请求将 5 字节写入寄存器 0x1010 (SPI TX FIFO),其中 SPI 报头的存储 = 1、SPI 通道 = 2 以及 SPI 帧长度为 10 字节。仅传输 SPI 帧的前 3 个字节数据。 |
| 2 | 响应器 (DLC = 2B) | 0x05, 0x01 | 响应器发回一个 OK 以确认已收到请求。 |
| 3 | ECU (DLC = 12B) | 0x07, 0x10, 0x10, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0x00, 0x00 |
ECU 继续向同一地址发起 7 字节写入请求。由于能容纳该帧的 CAN DLC 为 12 字节,因此在末尾填充 2 字节。填充字节的值无实际意义,会被忽略。 |
| 4 | 响应器 (DLC = 2B) | 0x07, 0x01 | 响应器发回一个 OK 以确认已收到请求。 |
| 3 | SPI | PICO:0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA POCI:0x01、0x02、0x03、0x04、0x05、0x06、0x07、0x08、0x09、0x0A |
此时,响应器在 SPI 通道 2 上执行 10 字节的 SPI 传输。POCI 数据存储在 RX FIFO 中 |
| 4 | ECU (DLC = 3B) | 0x43、0x10、0x0F | ECU 请求从寄存器 0x100F-0x1011(SPI_STATUS 和 SPI_RXFS)读取 3 字节数据。由于突发读取并非从 0x1010 (SPI RX FIFO) 开始,因此对应该寄存器的字节将填充为 0。对于未从 FIFO 开始的突发读取,其对应 FIFO 的字节将返回“0”。 |
| 5 | 响应器 (DLC = 5B) | 0x43, 0x01, 0xCA, 0x00, 0x01 | 响应器返回寄存器 0x100F 的数据、寄存器 0x1010 的填充值 0 以及寄存器 0x1011 的数据。返回数据表明:TX FIFO 为空,RX FIFO 包含 1 个 SPI 帧,且 RX FIFO 的下一个元素包含 10 字节数据。ECU 根据该信息,将请求从器件读取 10 + 2(SPI 报头)字节数据。 |
| 6 | ECU (DLC = 3B) | 0x48、0x10、0x10 | ECU 请求从 RX FIFO 读取 8 字节数据(含 2 字节报头 + 6 字节数据) |
| 7 | 响应器 (DLC = 12B) | 0x48, 0x01, 0x02, 0x0A, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x00, 0x00 |
响应器返回请求的 8 字节数据(尽管 DLC 为 12,但我们知道,CAN 响应报头后的 8 字节才是有效数据,其余的 0 均为填充字节)。SPI 报头字节表明:此为帧读取的起始,使用的是 SPI 通道 2,尚有 10 字节 SPI 数据待读取。由于能容纳该数据的最近 CAN DLC 为 12 字节,因此在末尾填充 2 字节数据。ECU 已获知有 10 字节 SPI 数据待读取,但仅请求读取 6 字节。这意味着尚有 4 字节 SPI 数据待读取。 |
| 8 | ECU (DLC = 3B) | 0x46、0x10、0x10 | ECU 请求从 RX FIFO 读取 6 字节数据(4 字节数据 + 2 字节报头),以完成读取操作。 |
| 9 | 响应器 (DLC = 8B) | 0x46, 0x01, 0x82, 0x04, 0x07, 0x08, 0x09, 0x0A |
响应器返回请求的 6 字节数据。SPI 报头字节表明:此为帧读取的延续,使用的是 SPI 通道 2,尚有 4 字节 SPI 数据待读取(可容纳于本帧中)。由于待发送数据与 CAN 帧大小匹配,因此无需填充字节。 |