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通道用以传输控制命令,他们之间会有影响吗?)
已解决! 转到解答。
Hi,
commit buffer failure 的错误代码查一下。完整的Uart debug输出是?
在UVC应用中会有小概率的丢帧属于很正常的现象。从bulk传输模式的原理来说,这本身就是一种数据传输优先的方式。Bulk传输模式支持的data brust是不要求发送的每个包都返回ACK的。可以尝试改成isochronous 传输模式。
另外Commit buffer failures 通常出现在主机消耗DMA缓冲区速度较慢时,这会导致DMA缓冲区溢出情况。以下KBA您也可以参考一下,它描述了Commit buffer failures的原因及如何避免。
关于MIPI clock 配置问题可以参考以下文件12页1.7节
Hi,
看您的描述,应该是DMA缓冲区不够被占满,可以在确保vertical blanking不低于~350 us的情况下,尽可能高的配置horizontal blanking,同时可以减少vertical blanking,以保持帧率不变。DMA通道不是互连的,项目中的其他DMA通道之间不会有影响,但是同一个firmware里其他通道的使用会影响用于UVC 的缓存区大小。
Hi,您好。
我进行了两个地方的修改,使得工程能够基本满足使用。
1、我将DMACB中切换LPM 相关的操作取消了,有很大程度上的改善。
2、初始化配置有修改(clk cache 等) 之前是使用的以前FX3项目的,现改为UVC AN90369 相同配置。
目前唯一的问题是,程序偶尔会跑飞,和之前的状态一样,SMstate =09 或者10。解决的方法目前想到的是出现这种状态的时候就重新启动app,但是不知道在什么位置重启比较好,或者说有什么事件 或者中断让我监控到这一状态?
您好,上面的问题解决了,我可以正常监测到异常状态并及时响应,重新启动状态机。 目前新的问题是:
经常会出现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+ 附近, 也不能正常出图。
Hi,
commit buffer failure 的错误代码查一下。完整的Uart debug输出是?
在UVC应用中会有小概率的丢帧属于很正常的现象。从bulk传输模式的原理来说,这本身就是一种数据传输优先的方式。Bulk传输模式支持的data brust是不要求发送的每个包都返回ACK的。可以尝试改成isochronous 传输模式。
另外Commit buffer failures 通常出现在主机消耗DMA缓冲区速度较慢时,这会导致DMA缓冲区溢出情况。以下KBA您也可以参考一下,它描述了Commit buffer failures的原因及如何避免。
关于MIPI clock 配置问题可以参考以下文件12页1.7节