ME05 改写了CAN部分相关的SDK函数以达到增加MB数量,但存在BUG
-
一、背景:
①需要同时要收发很多报文,报文的长度有8byte,64byte。
②ME的CAN0有64个MB,在物理上是占用两块block(block0,block1)。
二、问题:
payload设置成FLEXCAN_PAYLOAD_SIZE_64,那么可能导致整个MB使用个数比较少,CAN0只有14个
三、需求:想通过每块block的payload(MBDSR)分开配置以达到增加MB的个数,如将长度位8byte的报文放在block0区域,将64byte的报文放在block1,那么可利用的MB大小就会变成39(32 + 7)个我自己尝试改写了SDK的部分函数 如:uint8_t FLEXCAN_GetPayloadSize(const CAN_Type * base)
改为uint8_t FLEXCAN_GetPayloadSize(const CAN_Type * base, uint8_t MBDSR)
status_t FLEXCAN_SetMaxMsgBuffNum(
CAN_Type * base,
uint32_t maxMsgBuffNum)volatile uint32_t* FLEXCAN_GetMsgBuffRegion(
CAN_Type * base,
uint32_t msgBuffIdx)
等相关函数(没有举例完,详情查看工程)flexcanInitConfig0设置形式为
目前现状:
程序初始化函数配置等都返回0(.max_num_mb = 39UL允许存在)
函数返回值均为0但是只有.payload0 = FLEXCAN_PAYLOAD_SIZE_8,block0范围内的邮箱号可以正常使用(正常收发);
.payload1 ==FLEXCAN_PAYLOAD_SIZE_64,block2范围内的邮箱号无效使用(收发跑不起来)附件为我的工程,感谢答疑~!Flexcan_Canfd_Demo.zip
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...