Part Number:AWR1642
你好,我写了一个CAN SBL的程序用来用于1642的APP程序更新,整体功能已经实现,现在再CAN异常处理方面出了问题。
简述一下CAN在整个过程中的操作。
SBL部分按照流程如下:
1.CANFD_init()
2.发送CAN信息
3.在准备跳到APP执行之前CANFD_deinit(canHandle,&errCode1);
APP中:
1.CANFD_init()
2.发送CAN信息
系统上电时如果有连接外部CAN网络,则上电后系统能正常工作。
系统上电时如果没有连接外部CAN网络,上电后再接入外部CAN网络,则系统CAN工作异常,没有CAN信息发出来。
如果只使用APP程序,系统上电时如果没有连接外部CAN网络,上电后再接入外部CAN网络,系统能正常工作,有CAN信息发送出来。
APP和SBL中CAN的配置是一样的。
Chris Meng:
user4861090 说:系统上电时如果没有连接外部CAN网络,上电后再接入外部CAN网络,则系统CAN工作异常,没有CAN信息发出来。
在这个测试的时候SBL里的发射CAN信息的时候外部应该是没有CAN网络的对么?你说的没有CAN信息发处理,是说的APP里没有发出来么?你确认在APP发送CAN的时候,CAN网络已经正常了,对么?
,
Chris Meng:
你好,
是否有尝试过在sbl里启动app的R4F reset,修改为SOFTSYSRST(warm reset),看是否有改善?
,
Chris Meng:
你好,
请问你使用的mmwave sdk的版本是?
,
user4861090:
是的,刚上电时SBL中CAN往外发送信息时,外部时没有网络的,过大概1秒后会跳到APP中发送CAN信息,此时外部仍外没有CAN网络。然后我将CAN接到一个CAN_USB转换设备上,但CAN_USB收不到来自雷达的CAN报文。
,
user4861090:
用的是mmwave_sdk_03_05_00_04
,
user4861090:
SOFTSYSRST和这个*(volatile uint32_t*)(0xFFFFE11C) = 0x000000AD是不是一样的?
*(volatile uint32_t*)(0xFFFFE11C) = 0x000000AD 这句的效果我之前试过应该使整个芯片复位,那效果不是从SBL中复位然后又重新进入SBL然后又重新复位。。。。如此反复
,
Chris Meng:
user4861090 说:
SOFTSYSRST和这个*(volatile uint32_t*)(0xFFFFE11C) = 0x000000AD是不是一样的?
*(volatile uint32_t*)(0xFFFFE11C) = 0x000000AD 这句的效果我之前试过应该使整个芯片复位,那效果不是从SBL中复位然后又重新进入SBL然后又重新复位。。。。如此反复
同意你的观点,这个建议我考虑不周。
,
Chris Meng:
user4861090 说:用的是mmwave_sdk_03_05_00_04
能否尝试在SBL里的CANFD_deinit前,手动调用一下CANFD_transmitDataCancel,然后关闭MCAN的所有中断(disable),看是否有改善?
,
user4861090:
Chris Meng 说:闭MCA
谢谢,我试了CANFD_transmitDataCancel就可以正常工作了,MCAN关闭所有中断目前有相应的接口函数吗?我好像没找到。
,
Chris Meng:
user4861090 说:MCAN关闭所有中断目前有相应的接口函数吗?我好像没找到。
手动修改相关寄存器。
如果调用CANFD_transmitDataCancel可以解决问题,可以不用再手动关闭所有中断。