Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FRDM-MCXN947的CAN驱动发送一帧后阻塞 #8822

Open
Alipay1 opened this issue Apr 19, 2024 · 0 comments
Open

FRDM-MCXN947的CAN驱动发送一帧后阻塞 #8822

Alipay1 opened this issue Apr 19, 2024 · 0 comments

Comments

@Alipay1
Copy link

Alipay1 commented Apr 19, 2024

环境

芯片:NXP-MCXN947
开发板:FRDM-MCXN947
BSP:nxp->mcx->mcxn
工具链:Keil 5, ArmClang V6.21
RT-Thread版本:5.1.0

现象及复现步骤

调用 rt_device_write(can_dev, 0, &msg, sizeof(msg)); 导致阻塞

在编写CAN外设测评时,简单复制了RT-Thread官方文档提供的CAN示例代码,可以正常发送一帧ID为0x78的CAN数据帧

但是对设备写入函数rt_device_write进行简单的for循环发送的时候却出现了阻塞,第一条写入函数后的代码均无法执行,尝试取消掉for循环,直接在rt_device_write后加入rt_kprintf也同样无法打印任何内容。

目前已知

第一次排查

5.1.0版本的mcxn提供的bsp文件中drv_can.c中,flexcan_callback函数有部分被注释,尝试取消注释。
image

并且drv_can.c中的CAN发送函数使用的是NXP提供的FSL库中的阻塞发送函数,推测该函数不能触发发送完成中断。
image

于是作出如下更改:(红框为原有发送函数,绿框为修改后的函数)
77f3033240a447ae373ab7def3b6fe1

修改后的发送函数确实可以运行至flexcan_callbackkStatus_FLEXCAN_TxIdle分支

但是rt_device_write(can_dev, 0, &msg, sizeof(msg));仍然有阻塞问题。

第二次排查

发现更改rt-thread/components/drivers/can/can.c中第169行的等待时长可以解决该问题,但是此方法不严谨,不适合作为解决办法。
can.c已经在RT-Thread源代码中存在时间较长,不应有此类问题,推测是MCXN947的bsp中存在某些错误导致,特此提出issue希望RT-Thread官方能协助排查此问题。
同时我也将过程记录下来发在RT-Thread论坛,详见:

https://club.rt-thread.org/ask/article/ef0ab0d46a298ca5.html

(第一次发issue,如有错误还请见谅🙃)

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant