CX3 DMA Buffer 配置相关问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
michael0529
Level 1
Level 1
First reply posted First question asked Welcome!

hi,下午好

        最近在使用CX3进行相关项目开发,应用场景基于UVC AN90369,将sensor 数据通过CX3 向PC端传输,目前遇到的问题是这样的:

当我配置dmaMultiConfig.size=32KB,dmaMultiConfig.count=2 时,无法正常出图,CSI 模块可以正常解析HSYNC VSYNC。

当我配置dmaMultiConfig.size=54KB,dmaMultiConfig.count=2 时,可以出 1920x1280@30fpsz帧的图,但是非常不稳定,经过大概几分钟就会死机,状态机 SMstate =10 或者 SMstate =09;无法再进入DMAcb 回调函数,或者GPIFCB 回调函数。(由于前期设计没有加入JTAG设计,无法进行在线调试,所以也不确定程序运行到什么地方了。) dmaMultiConfig.size=54kb,dmaMultiConfig.count=2 是我尝试能正常工作的最大DMAbuffer 配置了,死机现象可以加大DMAbuffer 大小解决,但似乎我已经加大到最大值了。

当我修改sensor 端的配置,加大HTS ,即加大了HBLANK, 该方法也能改善,或者说解决死机问题。但是加大HTS 后,帧率达不到30fps ,无法满足我的使用需求。

我想请问,DMAbuffer 的大小和count的设置遵循什么样的规则,(我的项目中还有其他DMA通道用以传输控制命令,他们之间会有影响吗?)

    

0 点赞
1 解答
JiangJing
Moderator
Moderator
Moderator
First like given 250 sign-ins 250 replies posted

Hi,

 commit buffer failure 的错误代码查一下。完整的Uart debug输出是?

在UVC应用中会有小概率的丢帧属于很正常的现象。从bulk传输模式的原理来说,这本身就是一种数据传输优先的方式。Bulk传输模式支持的data brust是不要求发送的每个包都返回ACK的。可以尝试改成isochronous 传输模式。

另外Commit buffer failures 通常出现在主机消耗DMA缓冲区速度较慢时,这会导致DMA缓冲区溢出情况。以下KBA您也可以参考一下,它描述了Commit buffer failures的原因及如何避免

https://community.infineon.com/t5/Knowledge-Base-Articles/Handling-Commit-Buffer-Failures-Occurred-d...

关于MIPI clock 配置问题可以参考以下文件12页1.7节

https://www.infineon.com/dgdl/Infineon-EZ-USB_CX3_Technical_Reference_Manual-AdditionalTechnicalInfo...

在原帖中查看解决方案

0 点赞
5 回复数
JiangJing
Moderator
Moderator
Moderator
First like given 250 sign-ins 250 replies posted

Hi,

    看您的描述,应该是DMA缓冲区不够被占满,可以在确保vertical blanking不低于~350 us的情况下,尽可能高的配置horizontal blanking,同时可以减少vertical blanking,以保持帧率不变。DMA通道不是互连的,项目中的其他DMA通道之间不会有影响,但是同一个firmware里其他通道的使用会影响用于UVC 的缓存区大小。

 

0 点赞
michael0529
Level 1
Level 1
First reply posted First question asked Welcome!

Hi,您好。

我进行了两个地方的修改,使得工程能够基本满足使用。

1、我将DMACB中切换LPM 相关的操作取消了,有很大程度上的改善。

2、初始化配置有修改(clk cache 等) 之前是使用的以前FX3项目的,现改为UVC AN90369 相同配置。

目前唯一的问题是,程序偶尔会跑飞,和之前的状态一样,SMstate =09 或者10。解决的方法目前想到的是出现这种状态的时候就重新启动app,但是不知道在什么位置重启比较好,或者说有什么事件 或者中断让我监控到这一状态?

0 点赞
JiangJing
Moderator
Moderator
Moderator
First like given 250 sign-ins 250 replies posted

Hi,

     您是想监控程序具体在哪跑飞了吗?这个如果没有JTAG无法进行在线调试的话可能不太行,或者您可以分享一下完整的 UART debug logs ?谢谢

0 点赞
michael0529
Level 1
Level 1
First reply posted First question asked Welcome!

您好,上面的问题解决了,我可以正常监测到异常状态并及时响应,重新启动状态机。 目前新的问题是:

经常会出现DMA buffer commit 失败的情况,大概概率为0.14%,这是正常现象吗?

另外我想请问一下,MIPICSI config 中的CSI RX CLOCK 和 Output Pixel CLOCK 始终是保持一致吗?

理论的需求是关系是什么?比如我项目中 mipi data 速率为500Mbps(250MHz) ,4lane,GPIF总线为24bit  .则Output Pixel CLOCK 应当配置为4*500 /24 =83.33M    但当我按这个配置时,大多数情况是不能正常出图的,我只能按经验 多次尝试,才能找到一个合适的值。     或者说我理解上有错误?实际只需要按 1920x1280x16bitx30fps  /24bit 总的数据量去匹配,  配置约49M ,但配置49M 或50+ 附近, 也不能正常出图。

0 点赞
JiangJing
Moderator
Moderator
Moderator
First like given 250 sign-ins 250 replies posted

Hi,

 commit buffer failure 的错误代码查一下。完整的Uart debug输出是?

在UVC应用中会有小概率的丢帧属于很正常的现象。从bulk传输模式的原理来说,这本身就是一种数据传输优先的方式。Bulk传输模式支持的data brust是不要求发送的每个包都返回ACK的。可以尝试改成isochronous 传输模式。

另外Commit buffer failures 通常出现在主机消耗DMA缓冲区速度较慢时,这会导致DMA缓冲区溢出情况。以下KBA您也可以参考一下,它描述了Commit buffer failures的原因及如何避免

https://community.infineon.com/t5/Knowledge-Base-Articles/Handling-Commit-Buffer-Failures-Occurred-d...

关于MIPI clock 配置问题可以参考以下文件12页1.7节

https://www.infineon.com/dgdl/Infineon-EZ-USB_CX3_Technical_Reference_Manual-AdditionalTechnicalInfo...

0 点赞