ZHCAF60 February   2025 MSPM0G3507

 

  1.   1
  2.   摘要
  3.   商标
  4. 1简介
    1. 1.1 在 CAN 与 SPI 之间建立桥接
  5. 2实施
    1. 2.1 原理
    2. 2.2 结构
  6. 3软件说明
    1. 3.1 软件功能
    2. 3.2 可配置参数
    3. 3.3 自定义元件的结构
    4. 3.4 FIFO 的结构
    5. 3.5 SPI 接收和传输(透明传输)
    6. 3.6 SPI 接收和传输(协议传输)
    7. 3.7 CAN 接收和传输
    8. 3.8 应用集成
  7. 4硬件
  8. 5应用程序方面
    1. 5.1 结构灵活
    2. 5.2 可选的 SPI 配置
    3. 5.3 可选的 CAN 配置
    4. 5.4 CAN 总线多节点通信示例
  9. 6总结
  10. 7参考资料

可配置参数

所有可配置参数都在 user_define.h 中定义,如 表 3-3 中所列。

对于 SPI,此示例同时支持透明传输和协议传输,即通过定义 SPI_TRANSPARENT 或 SPI_PROTOCOL 进行切换。

在透明传输中,用户可以配置 SPI 从机的超时,以检测一条 SPI 消息接收完成。用户还可以为从 SPI 从机到 SPI 主机的消息配置默认数据长度 (SPI_TRANSPARENT_LENGTH)。表 3-2 列出了在不同模式下接收或发送的字节数。

在协议传输中,用户可以为不同格式配置 ID 长度。请注意有一个固定的 2 字节标头 (0x55 0xAA) 和一个字节的数据长度。若要更详细地修改格式,用户可以直接修改代码。

#define SPI_TRANSPARENT
#ifdef SPI_TRANSPARENT
/* The format of SPI:
     * Transparent transmission - Data1 Data2 ...*/
/* data length for SPI master receiving or SPI slave transmitting*/
#define SPI_TRANSPARENT_LENGTH  (8)     //need be <= TRANSMIT_DATA_LENGTH
#define SPI_TIMEOUT     (0x4000)      //timeout 250ms
#else
/* The format of SPI:
     * if SPI_ID_LENGTH = 4, format is 55 AA ID1 ID2 ID3 ID4 Length Data1 Data2 ...
     * if SPI_ID_LENGTH = 1, format is 55 AA ID Length Data1 Data2 ...
     * if SPI_ID_LENGTH = 0, format is 55 AA Length Data1 Data2 ...*/
//#define SPI_ID_LENGTH  (0)
//#define SPI_ID_LENGTH  (1)
#define SPI_ID_LENGTH  (4)
#endif
表 3-2 用于在不同 SPI 模式下进行接收或发送的字节数
参数 SPI 接口:主机 SPI 接口:从器件
接收到多少字节? 发送了多少字节? 接收到多少字节? 发送了多少字节?
协议传输 (2+SPI_ID_LENGT+1+Length) 字节 (2+SPI_ID_LENGT+1+Length) 字节 (2+SPI_ID_LENGT+1+Length) 字节 (2+SPI_ID_LENGT+1+Length) 字节
透明传输 (SPI_TRANSPARENT_LENGTH) 字节 (Length) 字节 超时用于标识消息结束 (SPI_TRANSPARENT_LENGTH) 字节

对于 CAN,CAN 帧中包含 ID 或数据长度。用户可以通过更改 CAN_ID_LENGTH(默认值为 0)来在数据区域中添加另一个 ID。

/* The format of CAN:
     * if CAN_ID_LENGTH = 4, format is ID1 ID2 ID3 ID4 Data1 Data2 ...
     * if CAN_ID_LENGTH = 1, format is ID Data1 Data2 ...
     * if CAN_ID_LENGTH = 0, format is Data1 Data2 ...*/
#define CAN_ID_LENGTH  (0)
//#define CAN_ID_LENGTH  (1)
//#define CAN_ID_LENGTH  (4)

表 3-3 可配置参数
参数 可选值 说明
#define SPI_TRANSPARENT 定义/未定义 启用 SPI 透明传输。
#define SPI_PROTOCOL 定义/未定义 启用 SPI 协议传输。
#defineSPI_TRANSPARENT_LENGTH (8) SPI 从机到 SPI 主机的消息的默认数据长度。仅在定义了 SPI_TRANSPARENT 时可用。在本例中,默认值为八个字节。
#define SPI_TIMEOUT (0x4000) 超时 = SPI_TIMEOUT/32768 s 超时用于指示一条 SPI 消息完成接收。仅在定义了 SPI_TRANSPARENT 时可用。在本例中,默认值为 250ms。
#define SPI_ID_LENGTH (4) 0/1/4 可选 SPI ID 长度,与协议中的 ID 区域相关。仅在定义了 SPI_PROTOCOL 时可用。在本例中,默认值为四个字节。
#define CAN_ID_LENGTH (0) 0/1/4 可选 CAN ID 长度,与协议中的 ID 区域相关。在本例中,默认值为 0 字节
#define TRANSMIT_DATA_LENGTH (12) <=64 数据区域的大小。如果接收到的消息包含的数据多于此值,会导致数据丢失
#define C2S_FIFO_SIZE (8) CAN 到 SPI FIFO 的大小。请注意 SRAM 的使用量。
#define S2C_FIFO_SIZE (8) SPI 到 CAN FIFO 的大小。请注意 SRAM 的使用量。
#define DEFAULT_SPI_ORIGIN_ID (0x00) SPI 原始 ID 的默认值
#define DEFAULT_SPI_DESTINATION_ID (0x00) SPI 目标 ID 的默认值
#define DEFAULT_CAN_ORIGIN_ID (0x00) CAN 原始 ID 的默认值
#define DEFAULT_CAN_DESTINATION_ID (0x00) CAN 目标 ID 的默认值