目前根据 TCAN455x Driver Library Demo_1.2.1_manifest.html demo 进行修改,跑出 500K 的 CAN bus 送收资料,在 CAN FD bus 的送收上一直实现不了,芯片初始化配置是采用 Init_CAN();函数来进行的,与 CAN FD 相关的初始化配置如下:
#if 1
/* Configure the CAN bus speeds */
TCAN4x5x_MCAN_Nominal_Timing_Simple TCANNomTiming = {0}; // 500k arbitration with a 40 MHz crystal ((40E6 / 2) / (32 + 8) = 500E3)
TCANNomTiming.NominalBitRatePrescaler = 2; // 标称比特率预分频器
TCANNomTiming.NominalTqBeforeSamplePoint = 32; // 采样点之前的标称时间段
TCANNomTiming.NominalTqAfterSamplePoint = 8; // 采样点后的标称时间段
#else
/* Configure the CAN bus speeds */
TCAN4x5x_MCAN_Nominal_Timing_Simple TCANNomTiming = {0}; // 500k arbitration with a 40 MHz crystal ((40E6 / 2) / (32 + 8) = 500E3)
TCANNomTiming.NominalBitRatePrescaler = 1;
TCANNomTiming.NominalTqBeforeSamplePoint = 15;
TCANNomTiming.NominalTqAfterSamplePoint = 5;
#endif
TCAN4x5x_MCAN_Data_Timing_Simple TCANDataTiming = {0}; // 2 Mbps CAN FD with a 40 MHz crystal (40E6 / (15 + 5) = 2E6)
TCANDataTiming.DataBitRatePrescaler = 1;
TCANDataTiming.DataTqBeforeSamplePoint = 15;
TCANDataTiming.DataTqAfterSamplePoint = 5;
/* Configure the CAN bus speeds */
TCAN4x5x_MCAN_Nominal_Timing_Simple TCANNomTiming = {0}; // 500k arbitration with a 40 MHz crystal ((40E6 / 2) / (32 + 8) = 500E3)
TCANNomTiming.NominalBitRatePrescaler = 2; // 标称比特率预分频器
TCANNomTiming.NominalTqBeforeSamplePoint = 32; // 采样点之前的标称时间段
TCANNomTiming.NominalTqAfterSamplePoint = 8; // 采样点后的标称时间段
#else
/* Configure the CAN bus speeds */
TCAN4x5x_MCAN_Nominal_Timing_Simple TCANNomTiming = {0}; // 500k arbitration with a 40 MHz crystal ((40E6 / 2) / (32 + 8) = 500E3)
TCANNomTiming.NominalBitRatePrescaler = 1;
TCANNomTiming.NominalTqBeforeSamplePoint = 15;
TCANNomTiming.NominalTqAfterSamplePoint = 5;
#endif
TCAN4x5x_MCAN_Data_Timing_Simple TCANDataTiming = {0}; // 2 Mbps CAN FD with a 40 MHz crystal (40E6 / (15 + 5) = 2E6)
TCANDataTiming.DataBitRatePrescaler = 1;
TCANDataTiming.DataTqBeforeSamplePoint = 15;
TCANDataTiming.DataTqAfterSamplePoint = 5;
/* Configure the MCAN core settings */
TCAN4x5x_MCAN_CCCR_Config cccrConfig = {0}; // Remember to initialize to 0, or you'll get random garbage!
cccrConfig.FDOE = 1; // CAN FD mode enable
cccrConfig.BRSE = 1; // CAN FD Bit rate switch enable
TCAN4x5x_MCAN_CCCR_Config cccrConfig = {0}; // Remember to initialize to 0, or you'll get random garbage!
cccrConfig.FDOE = 1; // CAN FD mode enable
cccrConfig.BRSE = 1; // CAN FD Bit rate switch enable
这样配置跑出来的通信都是 CAN bus 的 500K,请问这是什么原因造成的呢?