OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13886|回复: 11

STM32F439 USB UVC(YUY2)

[复制链接]

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
发表于 2017-6-13 17:22:19 | 显示全部楼层 |阅读模式
2金钱
刚入手STM32F429IGT开发板,各种例程都全的,但可惜没有USB UVC部分,网上找了些例子,不过都是传输MJPEG数据的,移植到板子上没啥问题,但是想实现传输YUY2数据,参照USBUVC协议搞了两周了快,一直搞不定,要么就是提示配置描述符无效(即使描述符是我从一个网购的USB UVC摄像头用BUSHOUND软件采集的配置描述符),要么就是不能出图,提示没有介质筛选器,请问有做过的朋友吗?麻烦发我一份例程吧,非常感谢!!!附件是USB UVC1.5协议,方便大家下载。
我的邮箱:33590284@qq.com


USB Video Class 1_5.zip

6.5 MB, 下载次数: 292

USB UVC1.5

最佳答案

查看完整内容[请看2#楼]

已解决,数据不匹配问题怀疑是bushound软件问题,出图没问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-13 17:22:20 | 显示全部楼层
已解决,数据不匹配问题怀疑是bushound软件问题,出图没问题。
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-13 17:23:58 | 显示全部楼层
支持自己下,希望能找到答案~~
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2017-6-14 21:09:47 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-15 10:13:33 | 显示全部楼层
今天试着先搞MJPEG,发现新问题,没有摄像头数据时,程序本来只发送2个字节的header数据,但是在bushound里面发现传输的是64个字节。
然后捕获按键操作来模拟一帧摄像头数据,结果发现传输的大小还是不一样,差的太多了,本来模拟的是102400字节,结果只发送了很少,搞不懂啊,求指教啊。以下是发送时的代码以及bushound数据。
static uint8_t  usbd_video_DataIn (void *pdev, uint8_t epnum)
{
        static uint16_t packets_cnt = 0xffff;
        static uint8_t header[2] = {2,0};//length + data
        static uint32_t picture_pos;
        static uint16_t packets_in_frame = 1;
        static uint16_t last_packet_size = 0;
        static uint8_t tx_enable_flag = 0;//
        static uint8_t packet[VIDEO_PACKET_SIZE];
        uint16_t i;
       
        if (epnum != (UVC_DATA_EP & 0x7F))
        {
                return USBD_OK;
  }
       
        DCD_EP_Flush(pdev,USB_ENDPOINT_IN(UVC_DATA_EP));//very important

  if (tx_enable_flag) packets_cnt++;
  
  if (tx_enable_flag == 0)//if previous transmission ended
  {
    if (jpeg_encode_done)//if frame endoding ended
    {
      tx_enable_flag = 1;
      
      //start of new UVC frame
      packets_cnt = 0;
      header[1] ^= 0x01;//toggle bit0 every new frame
      header[1] &= ~(0x02); //EOF
      picture_pos = 0;
      
      packets_in_frame = (last_jpeg_frame_size/ (VIDEO_PACKET_SIZE -2))+1;//
      last_packet_size = (last_jpeg_frame_size - ((packets_in_frame-1) * (VIDEO_PACKET_SIZE-2)) + 2);//
      //printf("framesize=%d,framecnt=%d.\r\n", last_jpeg_frame_size, ov_frame);
    }
  }

  packet[0] = header[0];
  packet[1] = header[1];

  //fill payload buffer
  for (i=2;i<VIDEO_PACKET_SIZE;i++)
  {
    packet[i] = dcmi_data_bufR[picture_pos];
                //packet[i] = packets_cnt;
    picture_pos++;
  }
  
  if (play_status == 2)
  {
    if (packets_cnt < (packets_in_frame - 1))
    {
      DCD_EP_Tx (pdev,USB_ENDPOINT_IN(UVC_DATA_EP), (uint8_t*)packet, (uint32_t)VIDEO_PACKET_SIZE);
    }
    else if (tx_enable_flag == 1)//only if transmisson enabled
    {
      //last packet in UVC frame
      packet[1] |= 0x02; //EOF
      DCD_EP_Tx (pdev,USB_ENDPOINT_IN(UVC_DATA_EP), (uint8_t*)packet, (uint32_t)last_packet_size);
      tx_enable_flag = 0;//stop TX data
      jpeg_encode_done = 0;
    }
    else
    {
            header[0]=2;header[1]=0;
      DCD_EP_Tx (pdev,USB_ENDPOINT_IN(UVC_DATA_EP), (uint8_t*)header, 2);//header only
      picture_pos = 0;
    }
  }
  else
  {
    packets_cnt = 0xffff;
    picture_pos = 0;
  }
  
  return USBD_OK;
}
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-15 10:14:49 | 显示全部楼层
这咋发图片啊?以下是bushound数据。
Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net

  Device - Device ID (followed by the endpoint for USB devices)
            (22) USB Composite Device
            (25) USB Composite Device
            (26) USB Camera
            (27) USB Composite Device
            (28) STM32 CUSTOM HID in FS Mode
  Address - FireWire async address or channel number
  Length - Total transfer length
  Phase  - Phase Type
            ISOC  Isochronous transfer      
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Delta  - Elapsed time from the previous phase to the current phase
  Cmd... - Position in the captured data
  Driver - Driver that submitted the command
            usbvideo     : USB Video Class Driver 10.0.14393.82 (rs1_release.160805-1735)


Device  Address              Length    Phase  Data                                                                                                    Description                       Delta  Cmd.Phase.Ofs(rep)  Driver      
------  -------------------  --------  -----  ------------------------------------------------------------------------------------------------------  --------------------------------  -----  ------------------  ------------
  28.1                             64  ISOC   02 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................................   14ms         1.1.0(5141)  usbvideo      
                                              00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................................                1.1.32                     
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-15 10:21:00 | 显示全部楼层
之前只做过Hid 中断传输和control传输,不知道是ISO传输相关库的bug还是我用的有问题,做过的朋友麻烦指教下。
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-15 10:21:49 | 显示全部楼层
回复

使用道具 举报

2

主题

59

帖子

0

精华

初级会员

Rank: 2

积分
80
金钱
80
注册时间
2017-6-13
在线时间
10 小时
 楼主| 发表于 2017-6-15 15:15:22 | 显示全部楼层
奇怪了只要在usbd_video_DataIn函数中调用DCD_EP_Tx函数就会导致数据不正常,明明发两个字节,bushound中显示发送了64个字节。
Bus Hound 6.01 capture on Windows Vista (x64). Complements of www.perisoft.net


Device  Address              Length    Phase  Data                                                                                                    Description                       Delta  Cmd.Phase.Ofs(rep)  Driver      
------  -------------------  --------  -----  ------------------------------------------------------------------------------------------------------  --------------------------------  -----  ------------------  ------------
  28.1                             64  ISOC   02 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................................   32ms     18548.1.0        usbvideo      
                                              00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................................            18548.1.32                     
  28.1                             64  ISOC   02 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................................   31ms     18549.1.0        usbvideo      
                                              00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................................            18549.1.32                     
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
5
金钱
5
注册时间
2021-1-15
在线时间
0 小时
发表于 2021-1-21 09:47:21 | 显示全部楼层
楼主,搞定了吗?
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-25
在线时间
12 小时
发表于 2021-3-2 11:27:23 | 显示全部楼层
335920284 发表于 2017-6-15 10:14
这咋发图片啊?以下是bushound数据。
Bus Hound 6.01 capture on Windows Vista (x64). Complements of ww ...

楼主你好,我想请教个问题,你是用stm32做的设备端吧,PC机是不是发送探针和commit命令后,设置接口,设备端就会不停的输出视频数据了?我用bus hound发送模拟发送这几条命令,没看到摄像头输出数据,不明白这里是怎么操作的
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-7-25
在线时间
12 小时
发表于 2021-3-2 11:30:17 | 显示全部楼层
命令如图,我用bus hound 软件按照这个顺序给UVC摄像头发送命令,摄像头不能出数据
Image 1.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 13:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表