目录

  • 前言
  • 位速率和采样点设置
  • Message RAM
  • 滤波器设置
  • 初始化部分代码汇总
  • Bus-Off中断处理
  • 发送函数
  • 接收中断处理
  • 测试
  • 微信公众号

前言

参考前几篇:

  • Jetson Xavier/XavierNX/TX2 CANFD 配置使用
  • STM32 CANFD 基础知识
  • STM32G474 CANFD 用例详解
  • STM32H750 更好用的CANFD 用例详解
  • AURIX TC397 CAN MCMCAN

本篇写TC397的CANFD的使用. TC397有3路MCMCAN组件(CAN0/1/2), 每路MCMCAN组件又支持4个节点, 所以, 共计支持12路CANFD, 资源如下, TC39x-B specific configuration of CAN:

Parameter CAN0 CAN1 CAN2
Node size in byte 1024 1024 1024
Number of CAN Nodes 4 4 4
Number of TTCAN Nodes 1
RAM size in byte 32768 16384 16384
Maximum Number of Standard ID Filter Messages per node 128 128 128
Maximum Number of Extended ID Filter Messages per node 64 64 64
Maximum Number of RxFIFO structures per node 2 2 2
Maximum Number of Messages in a Rx buffer per node 64 64 64
Maximum Number of Tx Event Messages per node 32 32 32
Maximum Number of Tx Messages in a Tx Buffer per node 32 32 32
Maximum number of trigger messages per TTCAN node 64

其中:

  • CAN0组件支持TTCAN
  • 正常每个MCMCAN组件4个节点(4路CANFD, M_CAN)共用的Message RAM大小为 16384 bytes = 4096 words = 16 KB, 相比之下, STM32H7所有FDCAN(目前最多3路)共用10KB

本篇使用TC397的CAN2中0~3节点中的CAN22, 连接到Xavier的CAN0, 仲裁段500K, 采样点0.8; 数据段2M, 采样点0.75.

位速率和采样点设置

TC397的相关计算:

    /** Bit timing & sampling* Tq = (BRP+1)/Fcan if DIV8 = 0* Tq = 8*(BRP+1)/Fcan if DIV8 = 1* TSync = 1.Tq* TSeg1 = (TSEG1+1)*Tq                >= 3Tq* TSeg2 = (TSEG2+1)*Tq                >= 2Tq* Bit Time = TSync + TSeg1 + TSeg2    >= 8Tq** Resynchronization:** Tsjw = (SJW + 1)*Tq* TSeg1 >= Tsjw + Tprop* TSeg2 >= Tsjw*/

主时钟频率来自IfxCan_getModuleFrequency()函数, 仿真或打印出来为 80MHz.

有两种方法设置位速率和采样点:

  • 设置 位速率, 采样点, SJW, calculateBitTimingValues设为True, 然后初始化节点函数中会自动计算位时间填入寄存器
  • 设置 BRP, TSEG1, TSEG2, SJW, calculateBitTimingValues设为False, 然后初始化节点函数中会直接把这些值填入寄存器

第一种的示例:

    g_mcmcan22.canNodeConfig.baudRate.baudrate = 500000;//10000*(1+TSeg1)/(1 + TSeg1 + TSeg2)     g_mcmcan22.canNodeConfig.baudRate.samplePoint = 10000*0.8;   //10000* TSeg2 / (1 + TSeg1 + TSeg2) = 10000 - samplePoint     g_mcmcan22.canNodeConfig.baudRate.syncJumpWidth = 2000;     g_mcmcan22.canNodeConfig.fastBaudRate.baudrate = 2000000;   g_mcmcan22.canNodeConfig.fastBaudRate.samplePoint = 10000*0.75;g_mcmcan22.canNodeConfig.fastBaudRate.syncJumpWidth = 2500;//TdcOffset default recommended value: DataTimeSeg1 * DataPrescalerg_mcmcan22.canNodeConfig.fastBaudRate.tranceiverDelayOffset = 28;g_mcmcan22.canNodeConfig.calculateBitTimingValues = TRUE;/*Ifx_Console_print(ENDLINE"moduleFreq: %.2f", IfxCan_getModuleFrequency());Ifx_Console_print(ENDLINE);Ifx_Console_print(ENDLINE"NBTP.B.NBRP = %d", g_mcmcan22.canNode.node->NBTP.B.NBRP);Ifx_Console_print(ENDLINE"NBTP.B.NSJW = %d", g_mcmcan22.canNode.node->NBTP.B.NSJW);Ifx_Console_print(ENDLINE"NBTP.B.NTSEG1 = %d", g_mcmcan22.canNode.node->NBTP.B.NTSEG1);Ifx_Console_print(ENDLINE"NBTP.B.NTSEG2 = %d", g_mcmcan22.canNode.node->NBTP.B.NTSEG2);Ifx_Console_print(ENDLINE);Ifx_Console_print(ENDLINE"DBTP.B.DBRP = %d", g_mcmcan22.canNode.node->DBTP.B.DBRP);Ifx_Console_print(ENDLINE"DBTP.B.DSJW = %d", g_mcmcan22.canNode.node->DBTP.B.DSJW);Ifx_Console_print(ENDLINE"DBTP.B.DTSEG1 = %d", g_mcmcan22.canNode.node->DBTP.B.DTSEG1);Ifx_Console_print(ENDLINE"DBTP.B.DTSEG2 = %d", g_mcmcan22.canNode.node->DBTP.B.DTSEG2);Ifx_Console_print(ENDLINE"DBTP.B.TDC = %d", g_mcmcan22.canNode.node->DBTP.B.TDC);Ifx_Console_print(ENDLINE"TDCR.B.TDCO = %d", g_mcmcan22.canNode.node->TDCR.B.TDCO);Ifx_Console_print(ENDLINE);*//** moduleFreq   = 80000000.00* NBTP.B.NBRP   = 7* NBTP.B.NSJW   = 3* NBTP.B.NTSEG1 = 14* NBTP.B.NTSEG2 = 3* DBTP.B.DBRP   = 1* DBTP.B.DSJW   = 4* DBTP.B.DTSEG1 = 13* DBTP.B.DTSEG2 = 4* DBTP.B.TDC    = 1* TDCR.B.TDCO   = 28*/

第二种的示例:

    //https://www.kvaser.com/support/calculators/can-fd-bit-timing-calculator/g_mcmcan22.canNodeConfig.baudRate.prescaler = 2 - 1;g_mcmcan22.canNodeConfig.baudRate.syncJumpWidth = 16 - 1;g_mcmcan22.canNodeConfig.baudRate.timeSegment1 = 63 - 1;g_mcmcan22.canNodeConfig.baudRate.timeSegment2 = 16 - 1;g_mcmcan22.canNodeConfig.fastBaudRate.prescaler = 2 - 1;g_mcmcan22.canNodeConfig.fastBaudRate.syncJumpWidth = 5 - 1;g_mcmcan22.canNodeConfig.fastBaudRate.timeSegment1 = 14 - 1;g_mcmcan22.canNodeConfig.fastBaudRate.timeSegment2 = 5 - 1;g_mcmcan22.canNodeConfig.fastBaudRate.tranceiverDelayOffset = 28;g_mcmcan22.canNodeConfig.calculateBitTimingValues = FALSE;/** moduleFreq   = 80000000.00* NBTP.B.NBRP   = 1* NBTP.B.NSJW   = 15* NBTP.B.NTSEG1 = 62* NBTP.B.NTSEG2 = 15* DBTP.B.DBRP   = 1* DBTP.B.DSJW   = 4* DBTP.B.DTSEG1 = 13* DBTP.B.DTSEG2 = 4* DBTP.B.TDC    = 1* TDCR.B.TDCO   = 28*/

用第二种时, iLLD TC39B Version: 1.0.1.12.0这个版本的IfxCan_Can_initNode()函数有点小bug, IfxCan_Can.c第140行由

IfxCan_Node_setFastBitTimingValues(nodeSfr, config->baudRate.syncJumpWidth, config->baudRate.timeSegment2, config->baudRate.timeSegment1, config->baudRate.prescaler);

改为

IfxCan_Node_setFastBitTimingValues(nodeSfr, config->fastBaudRate.syncJumpWidth, config->fastBaudRate.timeSegment2, config->fastBaudRate.timeSegment1, config->fastBaudRate.prescaler);

正常建议用第一种, 简单省心.

Message RAM

3个MCMCAN组件的起始和终止地址为:

Module Base Address End Address
CAN0 0xF0200000 0xF0208FFF
CAN1 0xF0210000 0xF0218FFF
CAN2 0xF0220000 0xF0228FFF

其中分配给Message RAM的空间为:

  • CAN0 Module的前0x8000 Bytes => 32768 Bytes 给了Message RAM
  • CAN1 Module的前0x4000 Bytes => 16384 Bytes 给了Message RAM
  • CAN2 Module的前0x4000 Bytes => 16384 Bytes 给了Message RAM

每个MCMCAN组件共4个节点所能使用的最大Message RAM资源如图所示:

如果全部元素都启用, 将占用 128 + 128 + 1152 + 1152 + 1152 + 64 + 576 + 128 = 4480 words = 17920 Bytes = 17.5KB, 超过了16384 bytes = 4096 words = 16 KB的最大Ram限制. 所以还是要有所取舍, 用到的分配, 不用的不分配.

下面会用到的参数总结如下:

  • 1 个 11-bit filter element => 1 words, 4个节点的11-bit filter element数量之和不超过128
  • 1 个 29-bit filter element => 2 words, 4个节点的29-bit filter element数量之和不超过64
  • 1 个 Rx FIFO 0 element => 18 words, 4个节点的Rx FIFO 0 element数量之和不超过64
  • 1 个 Tx Buffer element => 18 words, 4个节点的Tx Buffer element数量之和不超过32

0x4000 Bytes空间可以对四路CAN节点平均分配, 每路0x1000 Bytes, 所有资源也可以平分, 每路可以分:

  • 32 个 11-bit filter element
  • 16 个 29-bit filter element
  • 16 个 Rx FIFO 0 element
  • 16 个 Rx FIFO 1 element
  • 8 个 Tx Buffer element

当然一般不这么搞, 比如我这里只用了CAN22, 其它路不用, 完全可以分多点资源来用:

  • 32 个 11-bit filter elements
  • 16 个 29-bit filter elements
  • 20 个 Rx FIFO 0 elements
  • 20 个 Tx Buffer elements

对应的代码如下:

#define MODULE_CAN0_RAM    0xF0200000
#define MODULE_CAN1_RAM    0xF0210000
#define MODULE_CAN2_RAM    0xF0220000
#define NODE0_RAM_OFFSET   0x0
#define NODE1_RAM_OFFSET   0x1000
#define NODE2_RAM_OFFSET   0x2000
#define NODE3_RAM_OFFSET   0x3000g_mcmcan22.canNodeConfig.messageRAM.baseAddress = MODULE_CAN2_RAM;//Standard Frame, 32 elements => 32 words => 128 Bytes => 0x80g_mcmcan22.canNodeConfig.messageRAM.standardFilterListStartAddress = 0x0 + NODE2_RAM_OFFSET;//Extended Frame, 16 elements => 32 words => 128 Bytes => 0x80g_mcmcan22.canNodeConfig.messageRAM.extendedFilterListStartAddress = 0x80 + NODE2_RAM_OFFSET;//RxFIFO0, 20  elements => 360 words => 1440 Bytes => 0x5A0g_mcmcan22.canNodeConfig.messageRAM.rxBuffersStartAddress = 0x100 + NODE2_RAM_OFFSET;//Tx FIFO Buffers, 20  elements => 360 words => 1440 Bytes => 0x5A0g_mcmcan22.canNodeConfig.messageRAM.txBuffersStartAddress = 0x6A0 + NODE2_RAM_OFFSET;//Total: 128 + 128 + 1440 + 1440 = 3136 Bytes => 0xC40 Bytes

对应的资源分配如图所示:

滤波器设置

拿出1个标准帧滤波器+1个扩展帧滤波器, 用掩码的方式, 设置全接收到RxFIFO0中, 其它滤波器先不用:

    g_mcmcan22.canFilter.number = 0;g_mcmcan22.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxFifo0;g_mcmcan22.canFilter.type = IfxCan_FilterType_classic;g_mcmcan22.canFilter.id1 = 0;g_mcmcan22.canFilter.id2 = 0;g_mcmcan22.canFilter.rxBufferOffset = IfxCan_RxBufferId_0;IfxCan_Can_setStandardFilter(&(g_mcmcan22.canNode), &(g_mcmcan22.canFilter));g_mcmcan22.canFilter.number = 0;g_mcmcan22.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxFifo0;g_mcmcan22.canFilter.type = IfxCan_FilterType_classic;g_mcmcan22.canFilter.id1 = 0;g_mcmcan22.canFilter.id2 = 0;g_mcmcan22.canFilter.rxBufferOffset = IfxCan_RxBufferId_0;IfxCan_Can_setExtendedFilter(&(g_mcmcan22.canNode), &(g_mcmcan22.canFilter));

初始化部分代码汇总

#include "Ifx_Types.h"
#include "IfxCan_Can.h"
#include "IfxCan.h"#define CAN22_TOS          IfxSrc_Tos_cpu0#define MODULE_CAN0_RAM    0xF0200000
#define MODULE_CAN1_RAM    0xF0210000
#define MODULE_CAN2_RAM    0xF0220000
#define NODE0_RAM_OFFSET   0x0
#define NODE1_RAM_OFFSET   0x1000
#define NODE2_RAM_OFFSET   0x2000
#define NODE3_RAM_OFFSET   0x3000#define MAXIMUM_CAN_DATA_PAYLOAD      16    //words#define ISR_PRIORITY_CAN22_TX         121
#define ISR_PRIORITY_CAN22_RX         122
#define ISR_PRIORITY_CAN22_BUSOFF     135typedef struct
{IfxCan_Can_Config canConfig;                /* CAN module configuration structure   */IfxCan_Can canModule;                       /* CAN module handle                    */IfxCan_Can_Node canNode;                    /* CAN source node handle data structure*/IfxCan_Can_NodeConfig canNodeConfig;        /* CAN node configuration structure     */IfxCan_Filter canFilter;                    /* CAN filter configuration structure   */IfxCan_Message txMsg;                       /* Transmitted CAN message structure    */IfxCan_Message rxMsg;                       /* Received CAN message structure       */uint32 txData[MAXIMUM_CAN_DATA_PAYLOAD];    /* Transmitted CAN data array           */uint32 rxData[MAXIMUM_CAN_DATA_PAYLOAD];    /* Received CAN data array              */
} McmcanType;McmcanType g_mcmcan22;void init_can22_fd(void)
{IfxCan_Can_initModuleConfig(&g_mcmcan22.canConfig, &MODULE_CAN2);IfxCan_Can_initModule(&g_mcmcan22.canModule, &g_mcmcan22.canConfig);IfxCan_Can_initNodeConfig(&g_mcmcan22.canNodeConfig, &g_mcmcan22.canModule);    //set default node valueg_mcmcan22.canNodeConfig.nodeId = IfxCan_NodeId_2;  //4 node in 1 moduleg_mcmcan22.canNodeConfig.clockSource = IfxCan_ClockSource_both;g_mcmcan22.canNodeConfig.frame.type = IfxCan_FrameType_transmitAndReceive;g_mcmcan22.canNodeConfig.frame.mode = IfxCan_FrameMode_fdLongAndFast;  //CANFD Long Fast, FDF=1, BRS=1g_mcmcan22.canNodeConfig.txConfig.txMode = IfxCan_TxMode_fifo;g_mcmcan22.canNodeConfig.txConfig.txFifoQueueSize = 20;g_mcmcan22.canNodeConfig.txConfig.dedicatedTxBuffersNumber = 0;g_mcmcan22.canNodeConfig.txConfig.txEventFifoSize = 0;g_mcmcan22.canNodeConfig.txConfig.txBufferDataFieldSize = IfxCan_DataFieldSize_64;g_mcmcan22.canNodeConfig.rxConfig.rxMode = IfxCan_RxMode_fifo0;g_mcmcan22.canNodeConfig.rxConfig.rxFifo0Size = 20;g_mcmcan22.canNodeConfig.rxConfig.rxFifo0DataFieldSize = IfxCan_DataFieldSize_64;g_mcmcan22.canNodeConfig.rxConfig.rxFifo1Size = 0;g_mcmcan22.canNodeConfig.rxConfig.rxFifo1DataFieldSize = IfxCan_DataFieldSize_64;g_mcmcan22.canNodeConfig.rxConfig.rxBufferDataFieldSize = IfxCan_DataFieldSize_64;g_mcmcan22.canNodeConfig.rxConfig.rxFifo0WatermarkLevel = 0;    //event useg_mcmcan22.canNodeConfig.rxConfig.rxFifo1WatermarkLevel = 0;g_mcmcan22.canNodeConfig.rxConfig.rxFifo0OperatingMode = IfxCan_RxFifoMode_overwrite;   //or blockg_mcmcan22.canNodeConfig.rxConfig.rxFifo1OperatingMode = IfxCan_RxFifoMode_overwrite;g_mcmcan22.canNodeConfig.filterConfig.messageIdLength = IfxCan_MessageIdLength_both;g_mcmcan22.canNodeConfig.filterConfig.standardListSize = 32;  //Standard Frameg_mcmcan22.canNodeConfig.filterConfig.extendedListSize = 16;  //Extended Frameg_mcmcan22.canNodeConfig.filterConfig.rejectRemoteFramesWithStandardId = TRUE;g_mcmcan22.canNodeConfig.filterConfig.rejectRemoteFramesWithExtendedId = TRUE;g_mcmcan22.canNodeConfig.filterConfig.standardFilterForNonMatchingFrames = IfxCan_NonMatchingFrame_reject;g_mcmcan22.canNodeConfig.filterConfig.extendedFilterForNonMatchingFrames = IfxCan_NonMatchingFrame_reject;//Message RAMg_mcmcan22.canNodeConfig.messageRAM.baseAddress = MODULE_CAN2_RAM;//Standard Frame, 32 elements => 32 words => 128 Bytes => 0x80g_mcmcan22.canNodeConfig.messageRAM.standardFilterListStartAddress = 0x0 + NODE2_RAM_OFFSET;//Extended Frame, 16 elements => 32 words => 128 Bytes => 0x80g_mcmcan22.canNodeConfig.messageRAM.extendedFilterListStartAddress = 0x80 + NODE2_RAM_OFFSET;//RxFIFO0, 20  elements => 360 words => 1440 Bytes => 0x5A0//g_mcmcan22.canNodeConfig.messageRAM.rxBuffersStartAddress = 0x100 + NODE2_RAM_OFFSET;g_mcmcan22.canNodeConfig.messageRAM.rxFifo0StartAddress = 0x100 + NODE2_RAM_OFFSET;//Tx FIFO Buffers, 20  elements => 360 words => 1440 Bytes => 0x5A0g_mcmcan22.canNodeConfig.messageRAM.txBuffersStartAddress = 0x6A0 + NODE2_RAM_OFFSET;//Total: 128 + 128 + 1440 + 1440 = 3136 Bytes//transmit interruptg_mcmcan22.canNodeConfig.interruptConfig.transmissionCompletedEnabled = TRUE;g_mcmcan22.canNodeConfig.interruptConfig.traco.priority = ISR_PRIORITY_CAN22_TX;g_mcmcan22.canNodeConfig.interruptConfig.traco.interruptLine = IfxCan_InterruptLine_4;g_mcmcan22.canNodeConfig.interruptConfig.traco.typeOfService = CAN22_TOS;//receive interruptg_mcmcan22.canNodeConfig.interruptConfig.rxFifo0NewMessageEnabled = TRUE;g_mcmcan22.canNodeConfig.interruptConfig.rxf0n.priority = ISR_PRIORITY_CAN22_RX;g_mcmcan22.canNodeConfig.interruptConfig.rxf0n.interruptLine = IfxCan_InterruptLine_5;g_mcmcan22.canNodeConfig.interruptConfig.rxf0n.typeOfService = CAN22_TOS;//bus-off interruptg_mcmcan22.canNodeConfig.interruptConfig.busOffStatusEnabled = TRUE;g_mcmcan22.canNodeConfig.interruptConfig.boff.priority = ISR_PRIORITY_CAN22_BUSOFF;g_mcmcan22.canNodeConfig.interruptConfig.boff.interruptLine = IfxCan_InterruptLine_10;g_mcmcan22.canNodeConfig.interruptConfig.boff.typeOfService = CAN22_TOS;//clock: 80Mg_mcmcan22.canNodeConfig.baudRate.baudrate = 500000;    g_mcmcan22.canNodeConfig.baudRate.samplePoint = 10000*0.8;         g_mcmcan22.canNodeConfig.baudRate.syncJumpWidth = 2000;g_mcmcan22.canNodeConfig.fastBaudRate.baudrate = 2000000;   g_mcmcan22.canNodeConfig.fastBaudRate.samplePoint = 10000*0.75;g_mcmcan22.canNodeConfig.fastBaudRate.syncJumpWidth = 2500;g_mcmcan22.canNodeConfig.fastBaudRate.tranceiverDelayOffset = 28;g_mcmcan22.canNodeConfig.calculateBitTimingValues = TRUE;IFX_CONST IfxCan_Can_Pins can22_pins = {&IfxCan_TXD22_P22_8_OUT,   IfxPort_OutputMode_pushPull,&IfxCan_RXD22E_P22_9_IN,   IfxPort_InputMode_pullUp,IfxPort_PadDriver_cmosAutomotiveSpeed4};g_mcmcan22.canNodeConfig.pins = &can22_pins;IfxCan_Can_initNode(&g_mcmcan22.canNode, &g_mcmcan22.canNodeConfig);//std filter 0g_mcmcan22.canFilter.number = 0;g_mcmcan22.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxFifo0;g_mcmcan22.canFilter.type = IfxCan_FilterType_classic;g_mcmcan22.canFilter.id1 = 0;g_mcmcan22.canFilter.id2 = 0;g_mcmcan22.canFilter.rxBufferOffset = IfxCan_RxBufferId_0;  //maybe need changeIfxCan_Can_setStandardFilter(&(g_mcmcan22.canNode), &(g_mcmcan22.canFilter));g_mcmcan22.canFilter.number = 0;g_mcmcan22.canFilter.elementConfiguration = IfxCan_FilterElementConfiguration_storeInRxFifo0;g_mcmcan22.canFilter.type = IfxCan_FilterType_classic;g_mcmcan22.canFilter.id1 = 0;g_mcmcan22.canFilter.id2 = 0;g_mcmcan22.canFilter.rxBufferOffset = IfxCan_RxBufferId_0;IfxCan_Can_setExtendedFilter(&(g_mcmcan22.canNode), &(g_mcmcan22.canFilter));g_mcmcan22.rxMsg.readFromRxFifo0 = TRUE;
}

Bus-Off中断处理

如果CANH, CANL短接, 或者和其它节点的传输速率/采样点不一致, 会引发Bus-Off, 初始化开启了Bus-Off中断, 发生Bus-Off时, 直接在中断中初始化节点:

IFX_INTERRUPT(can22IsrBusOffHandler, 0, ISR_PRIORITY_CAN22_BUSOFF);
void can22IsrBusOffHandler(void)
{IfxCan_Node_clearInterruptFlag(g_mcmcan22.canNode.node, IfxCan_Interrupt_busOffStatus);init_can22_fd();
}

发送函数

开启了ESI和BRS.

uint8 can22_send_fd(uint32 messageId, IfxCan_DataLengthCode lengthCode, uint32 t_data[])
{static uint8 i;//                         {0,1,2,3,4,5,6,7,8,12,16,20,24,32,48,64};//static uint8 dlc2len[]  ={1,1,1,1,1,2,2,2,2,3, 4, 5, 6, 8, 12,16};IfxCan_Can_initMessage(&g_mcmcan22.txMsg);//g_mcmcan22.txMsg.bufferNumber = 0;g_mcmcan22.txMsg.messageId = messageId;if(messageId < 0x800) {g_mcmcan22.txMsg.messageIdLength=IfxCan_MessageIdLength_standard;} else {g_mcmcan22.txMsg.messageIdLength=IfxCan_MessageIdLength_extended;}g_mcmcan22.txMsg.errorStateIndicator = TRUE;g_mcmcan22.txMsg.dataLengthCode = lengthCode;g_mcmcan22.txMsg.frameMode = IfxCan_FrameMode_fdLongAndFast;    //FDF=1, BRS=1g_mcmcan22.txMsg.storeInTxFifoQueue = TRUE;//for(i = 0; i < dlc2len(lengthCode); i++) {for(i = 0; i < IfxCan_Node_getDataLength(lengthCode); i++) {g_mcmcan22.txData[i] = t_data[i];}if(IfxCan_Status_notSentBusy ==IfxCan_Can_sendMessage(&g_mcmcan22.canNode, &g_mcmcan22.txMsg, &g_mcmcan22.txData[0])){return 1;   //not send}return 0;   //send success
}

如果不习惯word数组的方式发送, 可以用byte数组拼凑:

    uint32 t_data[64];g_mcmcan22.txData[0] = (t_data[3]<<24) | (t_data[2]<<16) | (t_data[1]<<8) | t_data[0];g_mcmcan22.txData[1] = (t_data[7]<<24) | (t_data[6]<<16) | (t_data[5]<<8) | t_data[4];g_mcmcan22.txData[2] = ......

接收中断处理

初始化中滤波器设置了全接收到RxFIFO0, 开启了RxFIFO0新消息中断, 这里中断中第 0 word加1后, 返回:

IFX_INTERRUPT(can22IsrRxHandler, 0, ISR_PRIORITY_CAN22_RX);
void can22IsrRxHandler(void)
{IfxCan_Node_clearInterruptFlag(g_mcmcan22.canNode.node, IfxCan_Interrupt_rxFifo0NewMessage);//IfxCan_Node_clearRxBufferNewDataFlag(g_mcmcan22.canNode.node, g_mcmcan22.canFilter.rxBufferOffset);IfxCan_Can_readMessage(&g_mcmcan22.canNode, &g_mcmcan22.rxMsg, g_mcmcan22.rxData);++g_mcmcan22.rxData[0];can22_send_fd(g_mcmcan22.rxMsg.messageId, g_mcmcan22.rxMsg.dataLengthCode, g_mcmcan22.rxData);
}

测试

每10ms发送20帧, 发送1000次共20000帧:

void core0_main(void)
{...uint32 t_data1[16] = {0x0,        0x9ABCDEF0,0x12345678, 0x9ABCDEF0,0x12345678, 0x9ABCDEF0,0x12345678, 0x9ABCDEF0,0x12345678, 0x9ABCDEF0,0x12345678, 0x9ABCDEF0,0x12345678, 0x9ABCDEF0,0x12345678, 0x98765430};while(1){if(time_flag && t_data1[0]<1000) {time_flag = 0;++t_data1[0];can22_send_fd(0x110, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x109, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x108, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x107, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x106, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x105, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x104, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x103, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x102, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x101, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345679, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345678, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345677, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345676, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345675, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345674, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345673, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345672, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345671, IfxCan_DataLengthCode_64, t_data1);can22_send_fd(0x12345670, IfxCan_DataLengthCode_64, t_data1);//will lost//can22_send_fd(0x12345671, t_data1);}}
}

把TC397的的CAN22连到Xavier的CAN0上, Xavier CAN0设置:

#!/bin/shsudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcansudo ip link set down can0
sudo ip link set can0 type can bitrate 500000 sample-point 0.8 dbitrate 2000000 dsample-point 0.75 fd on restart-ms 100
sudo ip link set up can0
sudo ifconfig can0 txqueuelen 1000

Xavier也是仲裁段500Kbit/s, 采样点0.8, 数据段2Mbit/s, 采样点0.75.

restart-ms 100设置总线Bus-Off时, 100ms后重启.

设置完后查看设置状态 ip -details -statistics link show can0.

使用 candump -ta -x can0 >50.dat, 这里-ta显示绝对时间, 然后下载程序运行, 上面的20000帧数据全部存到50.dat文件中了, 共计20000行这里截取首尾部分显示:

 (1614240518.371442)  can0  RX B E  110  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.371720)  can0  RX B E  109  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.372054)  can0  RX B E  108  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.372375)  can0  RX B E  107  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.372724)  can0  RX B E  106  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.373140)  can0  RX B E  105  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.373401)  can0  RX B E  104  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.373743)  can0  RX B E  103  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.374080)  can0  RX B E  102  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.374469)  can0  RX B E  101  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.374806)  can0  RX B E  12345679  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.375181)  can0  RX B E  12345678  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.375562)  can0  RX B E  12345677  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.375943)  can0  RX B E  12345676  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.376318)  can0  RX B E  12345675  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.376696)  can0  RX B E  12345674  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.377076)  can0  RX B E  12345673  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.377457)  can0  RX B E  12345672  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.377831)  can0  RX B E  12345671  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.378210)  can0  RX B E  12345670  [64]  01 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.381356)  can0  RX B E       110  [64]  02 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240518.381692)  can0  RX B E       109  [64]  02 00 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98...(1614240528.360043)  can0  RX B E  12345670  [64]  E7 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.363191)  can0  RX B E       110  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.363530)  can0  RX B E       109  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.363872)  can0  RX B E       108  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.364214)  can0  RX B E       107  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.364589)  can0  RX B E       106  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.364922)  can0  RX B E       105  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.365249)  can0  RX B E       104  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.365582)  can0  RX B E       103  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.365922)  can0  RX B E       102  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.366264)  can0  RX B E       101  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.366642)  can0  RX B E  12345679  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.367020)  can0  RX B E  12345678  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.367398)  can0  RX B E  12345677  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.367776)  can0  RX B E  12345676  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.368154)  can0  RX B E  12345675  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.368532)  can0  RX B E  12345674  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.368909)  can0  RX B E  12345673  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.369289)  can0  RX B E  12345672  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.369666)  can0  RX B E  12345671  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98(1614240528.370065)  can0  RX B E  12345670  [64]  E8 03 00 00 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 F0 DE BC 9A 78 56 34 12 30 54 76 98

Xavier发送脚本, ##后面的3表示开启BRS和ESI:

#!/bin/shwhile true; docansend can0 18FF0001##3.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16cansend can0 18FF0002##3.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16cansend can0 18FF0003##3.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16  cansend can0 18FF0004##3.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16cansend can0 18FF0005##3.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16cansend can0 18FF0006##3.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16.01.02.03.04.05.06.07.08.09.10.11.12.13.14.15.16  cansend can0 123##3.00.02cansend can0 123##1.00.00sleep 1
done

运行后查看接收:

$ candump -ta -x can0(1614241024.270962)  can0  TX B E  18FF0001  [64]  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.271395)  can0  RX B E  18FF0001  [64]  02 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.273719)  can0  TX B E  18FF0002  [64]  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.274188)  can0  RX B E  18FF0002  [64]  02 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.276424)  can0  TX B E  18FF0003  [64]  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.276864)  can0  RX B E  18FF0003  [64]  02 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.280558)  can0  TX B E  18FF0004  [64]  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.281040)  can0  RX B E  18FF0004  [64]  02 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.286257)  can0  TX B E  18FF0005  [64]  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.286719)  can0  RX B E  18FF0005  [64]  02 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.289169)  can0  TX B E  18FF0006  [64]  01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.289623)  can0  RX B E  18FF0006  [64]  02 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16(1614241024.291607)  can0  TX B E       123  [02]  00 02(1614241024.291688)  can0  RX B E       123  [02]  01 02(1614241024.293145)  can0  TX B -       123  [02]  00 00(1614241024.293243)  can0  RX B E       123  [02]  01 00

收到后立即返回.

微信公众号

欢迎扫描二维码关注本人微信公众号, 及时获取或者发送给我最新消息:

TC397 CANFD 用例分析相关推荐

  1. stella forum v1.2 用例分析

    最近一直在看<uml与模式应用>,想把里面的ooa/d思想应用到下一版的stella forum中,按照里面统一过程的思想,先要做用例分析,嘿嘿,于是就有了下面这个昨天写的用户的帖子操作的 ...

  2. Makefile 实际用例分析(一) ------- 比较通用的一种架构

    这里不再说Makefile的基本知识,如果需要学习,那么请参考: 下载:makefile 中文手册 或者 点击打开链接 或者 跟我一起写Makefile( 陈皓 ) 这里说的是一般的实际的一个工程应该 ...

  3. 需求用例分析之九:序列图

    作者:张克强    作者微博:张克强-敏捷307 序列图,也称时序图.顺序图,英文名Sequence Diagram.在雅各布森用例分析方法中鼓励使用各类图形来表达,但恰恰没有明确提到序列图.而科伯恩 ...

  4. 苍狼敏捷需求用例分析方法简介并讲义下载

    作者:张克强    作者微博:张克强-敏捷307 用例分析方法已经有不短的历史,发展出了多种用例分析方法.笔者花费了大量时间,对用例分析的各个方面进行实践和分析,得到如下系列文章: 需求用例分析之一: ...

  5. 需求用例分析之七:业务用例之小结

    作者:张克强    作者微博:张克强-敏捷307 RUP虽然对于业务对象建模进行了详细的说明,但其本身并没有把业务对象建模(领域模型).业务用例作为必须的工件.Rational系方法把业务用例作为需求 ...

  6. 需求用例分析之八:用例颗粒度

    作者:张克强    作者微博:张克强-敏捷307 RUP系的考虑 在RUP中,没有对用例的颗粒度给出清晰的指导.2004年Rational 中国区技术销售经理 傅纯一发表一文<用例建模指南> ...

  7. 需求用例分析之四:业务规则

    作者:张克强 作者微博:张克强-敏捷307 在雅各布森用例分析方法和科伯恩用例分析方法中用例本身其实都没有"业务规则"的属性.但是业界使用中常常会给用例加上这个属性,这是为什么呢? ...

  8. 需求用例分析之三:补充规约

    补充规约在RUP中是记录那些在用例模型的用例中不容易体现出来的系统需求.这些需求包括: § 法律法规方面的需求和应用标准. § 要建立的系统质量属性,包括可用性需求.可靠性需求.性能需求和可支持性需求 ...

  9. 需求用例分析之二:级别设置

    在<编写有效用例>(阿莱斯特-科伯恩著,以下用科伯恩用例来指代)一书中,赋予了用例不同的级别,科伯恩形象的设定了如下级别:海平面.云朵.风筝.蛤等等. 科伯恩建议用例级别分为多个个目标层次 ...

  10. 需求用例分析之一:异常流

    问题的引出 备选流,又称备选事件流,英文是Alternative Flow.在RUP和UML中,备选流的解释如下:备选事件流包括与正常行为相关的可选或异常特征的行为,同时也包括正常行为的各种变形.您可 ...

最新文章

  1. CSDN总结的面试中的十大可视化工具
  2. JavaScript从作用域到闭包
  3. 带圆圈大小的散点图_Python数据可视化,Matplotlib绘制“散点图”的两种方法!...
  4. 求知无限,刷新.NET 中国社区
  5. 直男的回答能多出乎意料?
  6. 缩影和掠影_普查员的“酸苦甜” 社区人口普查工作掠影
  7. 2013年。。。。。。
  8. 优达学城数据分析笔记3--------数据分析过程(python篇)
  9. qml入门学习(一):hello world
  10. pytorch AUTOGRAD
  11. 阿里回应被列为被执行人;Linus Torvalds:我已经不是程序员;Ant Design 4.4.1 发布 | 极客头条
  12. python 多态 锁_python 上下文管理器,多态,数据锁定与自省,
  13. ffmpeg filter 实现画面旋转
  14. s7五杀大数据英雄_大数据公布新赛季拿五杀最多的英雄,韩信垫底,她却拿到手抽筋!...
  15. 系统重装之后如何恢复mysql数据
  16. 数字图像处理100问—43 Canny 边缘检测:第三步——滞后阈值
  17. js判断true和false
  18. 庞贝中文离线地图App上线
  19. Elastic-Job笔记
  20. 第九节 PyQt5之QRadioButton对象(单选按钮)

热门文章

  1. <Android开发> Android开发工具- 之-I2C TOOLS工具使用
  2. EtherCAT主站SOEM函数详解----SDO读写函数
  3. 英文学术论文写作有哪些经验心得?
  4. 《人人都是产品经理》系列图书说明 Late2021
  5. magisk核心功能模式是什么_科技板块——深入解析MM管理器
  6. IAR for STM8安装教程
  7. html ztree选中状态,ztree-select.html
  8. Linux学习一概述和环境搭建(入门概述,环境搭建,走近Linux系统)
  9. getch方法_getch()函数
  10. UDP SOCKET 两台电脑通信