各位大虾好, 手头有块板子,是老大以前做的,用的是CH374的芯片,现在要我加上摄像头,说是用等时传输就可以了。 看了CH374的文档,好像REG_USB_H_CTRL中有提到等时传输,请问应该怎么用。 谢谢!
刚刚看了程序,发现枚举是可以的,可是等时传输跟CH374的设置有什么关系呢? 请问设置那个 REG_USB_H_CTRL 的设置对等时传输可以起什么作用呢? 大虾们有空就帮我看看啦。
枚举是控制传输,枚举完毕后,还要对摄像头进行设置,打开,后面才是实时传输,启用实时传输,将主机发送缓冲区设置为128字节。
谢谢回复。 是这样的,因为有之前的程序可以参考,所以枚举没有问题。可以看到摄像头的信息,包括那一长串的配置描述符。 设置的话应该可以参考WINDOWS的方式吧,老大让我用BUS HOUND这个软件然后对着WINDOWS的设置顺序照抄。 但是实时传输在 CH374 的设置里面怎么体现呢?在寄存器REG_USB_H_CTRL中有提到实时传输,请问是要先设置这个么?
等开始抓取摄像头数据的时候才会用到实时传输,前面的还是初始化部分。 BIT_HOST_TRAN_ISO 这一位写1即进入实时传输模式。
多谢“红桃六”,我尽快完成初始化部分吧。等到了实时传输那一步,我再回来报告。好,赶快了!
初始化已完成,WINDOWS有很多查询参数的命令,没有管它们,直接跳到了设置的部分。摄像头返回的数据也正确,要开始实时传输了。但是在BUS HOUND上只显示 ISO, 然后就是一大堆数据。请问是设置 BIT_HOST_TRAN_ISO 后立即读那 128 字节的接受缓冲区么?
配置描述符你要分析的。你看一下你的摄像头是否有128字节端点的接口。如果没有则支持不了。
有的有的,在VS中有最小的一个接口配置是128字节的,描述符为 0x07 0x05 0x81 0x05 0x80 0x00 0x01 在设置中已经激活这个接口了。 接下来呢?
接下来发送设置这个接口,就可以,这个不能和计算机一样,计算机设置的接口号的端点比较大
剩下的就直接对端点发送IN令牌直接取数据就可以了。取一帧图像的时候尽可能块的把数据取走,放到缓冲区中,如果取数据慢,会导致一帧数据丢失。
好吧,晚上试试,谢谢。
早上好!我现在再确认一下步骤: 1、枚举并初始化摄像头 2、将ch374的接受缓冲扩至128字节,设置激活摄像头128字节的接口,对BIT_HOST_TRAN_ISO 这一位写1开始实时传输 3、对端点发送 IN 令牌,然后等待CH374中断信号再取数据,将此128字节的数据取走。 就是以上这样对吧?我试了一下,好像丢帧丢得很厉害啊,我用的是STM32的72M的CPU啊,还不够么?
你的摄像头带JPG压缩吗?
是的,可能由于CH374的协议问题吧,摄像头运作于USB1.1 的协议,所以请求到的配置为MJPEG的配置。 是不是需要在 1 毫秒内就把缓冲区的数据全部拿走,然后再次发送 IN 令牌开启实时传输? 我看看怎么抓这个时间。
不好意思现在才回来,最近都没跟进。 数据是可以抓到的,我把程序优化了下,STM32是足够在1ms内取走缓冲的128bytes数据的,但是,在某种情况下,实时传输会意外停止,这种情况下,REG_INTER_FLAG = 0xE0, REG_USB_STATUS = 0x80,此时对设备的一切操作都返回NAK。 必须对设备重新复位才可使其工作,不知为何?