社区导航

 
查看: 1198|回复: 19

[原创] 再续Openmv4,填挖坑路之一:从源头流程开始说起

[复制链接]

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-18 18:55:18 | 显示全部楼层 |阅读模式
嗯,终于挤出了点时间,还欠女神和队长几个帖子,我想着,那就以此作为连载贴,吹吹水. 去年我也自己DIY了openmv3,今年官方出了openmv4,我也顺着源码的理解,也同样DIY了openmv4,并且摄像头可拆卸,支持了四款摄像头,MT9V034,0V9650,OV2640,OV7725.由于官方至今还在众筹当中,而且等到3月份才发货,期间没有放出原理图
  在这个连载中,去年free叔叔说,之前的讲了太多硬件的东西,没什么大用处.所以在往后的帖子,并不多去介绍硬件上的那些坑.我更多想分享的是源码的理解,以及mricropython这个脚本语言最底层的理解.算法上的理解.
  mircropython有很多bsp支持,在这里我只是单纯用openmv4的bsp作为例子来说明,其他的Board其实流程也大致差不多.如果有其他坛友mpy的流程也有理解的,我如果有说得不对的地方,望给予纠正,一起进步.
  openmv包括两个部分,一个为openmv模块,另外一个为PC端的上位机,也就是openmvIDE.通信方式为USB的CDC虚拟串口.有自己的一个简单的通信协议,那么此贴我就是以通信作为开头,同样以通信作为结束.
Openmv的usb设备是虚拟串口和大存储设备复合.包括pyb等板子,支持mpy的板子都带此复合设备.USB设备这个玩意实在复杂,我也是对此对USB的底层驱动绕晕了头.openmv的初始化代码如下:
TIM截图20181118182243.png
    TIM截图20181118182400.png
    那我们再来看下USB设备的初始化代码,这个附属在mpy的Port文件夹的STM32的USB.C文件中,所有的STM32系列通用初始化的接口.
    TIM截图20181118183830.png
    TIM截图20181118183916.png
   那么我们来看下USBD_CDC_MSC_HID这个CDC/MSC接口的回调结构体.
    TIM截图20181118184753.png



此内容由EEWORLD论坛网友RCSN原创,如需转载或用于商业用途需征得作者同意并注明出处



此帖出自stm32/stm8论坛
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 19:16:50 | 显示全部楼层
那么我们知道了读写接口,就以读接口来作为说明,也就是USBD_CDC_MSC_HID_DataOut这个接口,注意我说的读接口,是指上位机openmvIde下发配置,写接口是发送数据给上位机.这个接口需要判断USB复合设备下是哪个设备所发的数据,是CDC设备还是MSC设备还是HID.我们这里讨论的是虚拟串口下与上位机IDE的交互,所以我们进而进入另外一个读写接口usbd_cdc_receive
TIM截图20181118190310.png
    我们可以看出,接受部分,首先判断波特率是否满足条件,再者判断帧头是不是0x30,再判断第二个字节是否为指令码,之后为数据长度大小.这就是openmv的简单通信协议.
    TIM截图20181118191154.png
   上图的dbg_mode_enabled成立条件就是CDC波特率是否满足条件
    TIM截图20181118191536.png

    TIM截图20181118191636.png

<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 20:12:52 | 显示全部楼层
如果波特率成立,那么就是协议的解析上,openmv上,协议很简单.比如我要读取软件版本号,那么先发帧头指令0x30,再发版本号指令码,再发对应的长度;再比如我要执行Py文件,先发帧头指令0x30,再发执行指令码,再发对应的长度,最后再发文件.对应的指令在usbdbg_cmd枚举当中.
    TIM截图20181118200749.png

    TIM截图20181118201013.png

<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

1480

TA的帖子

1

TA的资源

纯净的硅(高级)

Rank: 6Rank: 6

发表于 2018-11-18 20:23:39 来自手机 | 显示全部楼层
如果不是源码分析那就太细了。


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 21:09:51 | 显示全部楼层
好吧,可能我说了那么多,却没有实际验证起来.那么我们就跟踪着这思路,不使用官方IDE,单纯使用串口助手,来实现数据交互,看通信是否正常.那么最简单的方式,就是常用的读取其中的软件版本号.按照上述的表达以此来验证.
验证之前我们需要跟踪下源码,当收到第一个字节为0x30,也就是指令头,就进入到usbdbg_control函数当中,这个函数主要是判断哪个指令码,并把字节长度记录下来.这个长度很重要,比如记录py文件的长度,执行解析此文件的时候也是按照这个长度来解析.
TIM截图20181118205931.png
    发送完指令后.发现如果长度不为0,并且指令码大于0x80,上述枚举中大小大于0x80的都要收到指令后要进行回应,固件版本号刚好为0x80,则必须上报.
    TIM截图20181118210612.png
    跳进这个函数之后,最底层的函数接口就为usbdbg_data_in,这个写接口.
    TIM图片20181118210930.png

<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

7320

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2018-11-18 21:11:45 | 显示全部楼层
来点更激动人心的,比如在DIY一个?几个好玩的图像分析?

点评

D大晚上好. 我在淘宝上有预售,支持四款摄像头.后面我会放点gif图,效果是比openm3好.  详情 回复 发表于 2018-11-18 21:26


回复

使用道具 举报

7320

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2018-11-18 21:12:39 | 显示全部楼层
或者一起试试最新的K210板 openmv,这个看起来比较有前途的


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 21:21:48 | 显示全部楼层
接下来我们就是来验证下,在OpenmvIDE下,软件版本号的获取直接点击连接控件就可以看到版本号了,如下  
    TIM截图20181118211640.png
   那么我们用协议来发送,通过串口助手
   TIM截图20181118212138.png

<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 21:26:03 | 显示全部楼层
dcexpert 发表于 2018-11-18 21:11
来点更激动人心的,比如在DIY一个?几个好玩的图像分析?

D大晚上好.
  我在淘宝上有预售,支持四款摄像头.后面我会放点gif图,效果是比openm3好.

点评

H7和K210相比,那个性能更好?  详情 回复 发表于 2018-11-18 22:01
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

1851

TA的帖子

0

TA的资源

版主

Rank: 6Rank: 6

发表于 2018-11-18 21:35:59 | 显示全部楼层
很有钱图啊


回复

使用道具 举报

7320

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2018-11-18 22:01:36 | 显示全部楼层
RCSN 发表于 2018-11-18 21:26
D大晚上好.
  我在淘宝上有预售,支持四款摄像头.后面我会放点gif图,效果是比openm3好.

H7和K210相比,那个性能更好?K210应该成本会有优势,但是软件和硬件可能还有坑

点评

RISCV架构不了解.不过内置加速器,可以快速CNN计算,这是H7没法比的.其他资源不太清楚. Openmv4也有太多坑,开源的东西都是这样的,但K210开源多少,我也不太清楚.  详情 回复 发表于 2018-11-18 22:24


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 22:07:16 | 显示全部楼层
好像说的是有点单调无聊.还有一种方式就是使用官方的py文件进行验证.这个我可以留下下个帖子.
以下是部分git图了.清晰度上比openmv3好太多,openmvIDE里的demo例子都可以运行.
IMG_1005.JPG

P81118-215356.gif

P81118-215232.gif

P81118-215039.gif

P81118-214820.gif

P81118-214656.gif

P81118-214459.gif

<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-18 22:24:36 | 显示全部楼层
dcexpert 发表于 2018-11-18 22:01
H7和K210相比,那个性能更好?K210应该成本会有优势,但是软件和硬件可能还有坑

  RISCV架构不了解.不过内置加速器,可以快速CNN计算,这是H7没法比的.其他资源不太清楚.
  Openmv4也有太多坑,开源的东西都是这样的,但K210开源多少,我也不太清楚.
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-19 00:26:50 | 显示全部楼层
  由于openmv4的内存受限,大分辨率的RGB565显示不了,但是灰度的最大分辨率可以达到752*480
       P81119-002343.gif

点评

这个效果不错。 你签名中小店的链接好像出问题了,打不开。  详情 回复 发表于 2018-11-19 09:25
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

115

TA的帖子

2

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-11-19 09:02:27 | 显示全部楼层
给力,给力。


回复

使用道具 举报

7320

TA的帖子

14

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2018-11-19 09:25:15 | 显示全部楼层
RCSN 发表于 2018-11-19 00:26
由于openmv4的内存受限,大分辨率的RGB565显示不了,但是灰度的最大分辨率可以达到752*480

这个效果不错。

你签名中小店的链接好像出问题了,打不开。


回复

使用道具 举报

342

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2018-11-19 13:52:15 | 显示全部楼层
如果不是源码分析那就太细了


回复

使用道具 举报

570

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-11-20 09:00:32 | 显示全部楼层
PY城牛逼,我的板子还在吃灰呢

点评

玩起来啊  详情 回复 发表于 2018-11-20 09:21
Hello astroturfers


回复

使用道具 举报

809

TA的帖子

6

TA的资源

版主

Rank: 6Rank: 6

 楼主| 发表于 2018-11-20 09:21:19 | 显示全部楼层
y909334873 发表于 2018-11-20 09:00
PY城牛逼,我的板子还在吃灰呢

玩起来啊

点评

不是点过灯就算玩过了吗?  详情 回复 发表于 2018-11-20 10:51
<font color="Red">物致DIY 期待您的到来~
QQ群:646461928
小店


回复

使用道具 举报

570

TA的帖子

1

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2018-11-20 10:51:19 | 显示全部楼层

不是点过灯就算玩过了吗?
Hello astroturfers


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-19 13:06 , Processed in 0.513194 second(s), 16 queries , Gzip On, MemCache On.

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