文章
Send CAN FD messages
refer to NTCAN Application Developers Manual document charpter
- 1.4.2 Integration and Migration
- 8.4 Transmitting messages (CAN FD)
example code
fd_send.c:程序展示如何调用NTCAN API来发送CAN FD消息。 如下code snippet是需要注意的内容。
uint32_t mode=NTCAN_MODE_FD; /* Mode bits for canOpen */
NTCAN_BAUDRATE_X baud; /* Bit rate configuration */
CMSG_X cmsg[8]; /* Buffer for can messages */
int no_brs=0; /* No bit rate switch bit */
baud.mode = NTCAN_BAUDRATE_MODE_INDEX;
baud.flags = NTCAN_BAUDRATE_FLAG_FD;
baud.arb.u.idx = NTCAN_BAUD_1000; /* Nominal bit rate: 1000KBit/s */
baud.data.u.idx = NTCAN_BAUD_5000; /* Data phase bit rate: 5 MBit/s */
retvalue = canSetBaudrateX(rxhandle, &baud);
/*
* Initialize the first message in buffer to CAN id = 0, len = 12
* and data0-data12 = 0..11
*/
cmsg[0].id = 0x00;
cmsg[0].len = NTCAN_DATASIZE_TO_DLC(12);
cmsg[0].len |= (NTCAN_FD | (no_brs << 4));
for (i = 0; i < 12; i++)
cmsg[0].data[i] = (uint8_t)i;
len=1; /* Number of valid messages in cmsg buffer*/
retvalue = canWriteX(txhandle, &cmsg[0], &len, NULL);
if (retvalue != NTCAN_SUCCESS)
printf("canWriteX failed() with error %d!\n", retvalue);
else
printf("function canWriteX() returned OK !\n");
程序运行
首先建立一个CAN FD的总线。本人Demo总线系统上有两个设备,一个设备为esd CAN-PCIe/402-B4-FD安装在Ubuntu台式电脑上,上述的example code编译和运行在此电脑上。另一个设备为CAN-USB/3-FD连接到Win11笔记本电脑,此笔记本电脑上安装了最新版的CANreal软件。
参考CANreal中CAN FD的章节,编译执行上述example code,会向总线发送CAN FD消息。CANreal接收到的消息如下。
