TI中文支持网
TI专业的中文技术问题搜集分享网站

AWR1642: IWR1642 CAN异常处理

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可以解决问题,可以不用再手动关闭所有中断。

赞(0)
未经允许不得转载:TI中文支持网 » AWR1642: IWR1642 CAN异常处理
分享到: 更多 (0)