[作品提交] 【平头哥RVB2601创意应用开发】动态加载MBRE-作品提交

cqcqwind   2022-5-12 19:58 楼主

 

动态加载MBRE验证系统

 

作者:wy2601@outlook.com

  • 项目背景

近年来,随着我国芯片技术的发展,和无线网络的普及,IOT MCU成为微处理器市场中获得迅猛发展的一个重要领域。与传统的STM,51等单片机相比,国产IOT MCU提供了更好性价比下的能力置换,同时,因具有无线互联能力,在IOT(Internet of Things)万物互联这个新兴市场中取得了巨大的优势。

显然,由于其互联特性,IOT市场的重点从传统的MCU传感器数据本地处理,向广域、互联、智能的方向发展。其处理能力日渐增强,FLASH/RAM空间不断扩展,外部存储能力(如SD/TF大规模存储、psram扩展)不断提升,不再受到弱本地能力的限制。强大的MCU化和互联化的能力,为智能化和分布式终端应用提供了强大的基础。本质上提供了末端传感智能化的能力(end-point smart sensors)。

能力的提升带来的重要变化是:传统简单逻辑处理的传感器业务模型,更多的像只能应用(smart application)方向发展,特点如下:

  1. 灵活的网络互联能力:包括Lora、WIFI、2.5/3/4/5g在内的网络接入能力,加以相对完善的LWIP协议栈与上层应用协议,合并云端服务提供,为业务变化提供无限可能;
  2. 强大的本地处理能力:在高度性价比的条件限制下,仍可提供单/双CPU,100MHZ起步的CPU时钟,Mbit级的FLASH空间与大RAM,处理数据能力已经远超简单传感器数据范围
  3. 丰富的应用开发场景:IOT MCU已经不再是单片机,IOT MCU可以对比成弱化的传感器业务终端,与手机终端相比,可以预测,IOT MCU市场也必然是“应用为王”

本项目即是在RVB2601 RISCV开发板为基础,所开发的一套探索从SOC软件模式转换为SOC APP应用模式的验证系统。

  • 作品简介

传统的SOC软件开发中,系统(system)和应用(application)的逻辑一般是整合在一起的。IOT MCU的功能提升,使得这一整合模型的限制愈发明显:

    1. 应用与系统不分,开发环境与SDK往往比较复杂,入门曲线陡峭;开发编译烧写FLASH时间很长;调试修改费时费力;代码编写者必须相对熟悉系统底层;
    2. SOC软件一般缺乏类似PC体系或者移动应用体系中常见的动态加载能力,目前,多数系统功能的更新最多是OTA FLASH这个级别,无法动态、灵活的扩展、修改、增加新功能,系统存储资源利用率较低。

MBRE(Mini Binary Runtime Enviroment)作为本次作品,提供了RVB2601平台上动态加载能力的验证系统环境,能够在E906 RISCV上提供完整的应用(app)生成, app打包,app动态下载,app动态运行等原型验证功能。使得RVB2601能够突破现有SOC开发模式,转而像PC或者手机一样开发、装载、运行应用。迄今为止,尚未见到国内IOT MCU厂商提供类似MBRE功能的实际实现。(附注:乐鑫在其IDF中提及了提供esp系列ELF RAM加载功能,通过项目menuconfig可以看到选项,但只标注为实验性experimental功能,尚未提供正式发布的文档或者例程)。

 

 

 

 

 

  • 系统框图

 

 

image.png  

 

 

MBRE系统构成如上图所示,

        1 通过CDK环境开发,依赖提取的动态应用SDK开发(SDK可扩展,将系统底层应用通过接口的方式展现给上层)。APP开发时与SDK交互,不与系统层级代码直接交互。这使得APP变化时与os层代码相对独立,各自相对独立编译,大大加快了编译速度。编译连接完成后得到的ELF文件通过打包处理后,动态传递给RVB2601运行。实验中,使用了WEB服务器来验证远程APP下载能力。

        2 RVB2601中烧写好OS级别的核心代码,或其他相关资源/API实现。APP在CDK独立开发完成后,出发RVB2601的APP下载动作。实验中,通过串口命令app down实现下载出发;

        3 RVB2601执行下载动作,将得到的APP存储到本地,并根据配置实行自动运行或者手工触发运行。实验中,RVB2601通过WIFI下载APP到RAM中运行。由于内存限制,实验系统中仅支持下载运行一个APP。如果要运行其他APP,需重新下载运行。下载的APP无需烧写到FLASH中。

        4 原理上, RVB2601亦可将下载得到的APP存储到FLASH文件系统或者外部非易失存储中。存储中可以保存多个不同的APP,根据用户交互来执行不同功能。这样在有限的RAM和FLASH资源中,提供了无限扩展能力的APP资源。IOT MCU可以表现得像是一台智能手机或者MINI PC,提供丰富的、可更新的交互功能。

  • 各部分功能说明和解析

MBRE系统搭建方法如下:

  1. MBRE底包的烧写

附件中提供了MBRE基础功能的RVB2601底包,该底包应烧写到2601 FLASH中。底包基于2601的网络MP3播放例程修改,因2601烧写单一分区的命令行和处理流程尚不明确,故烧写时,若有必要,可借助上述工程辅助烧写。烧写底包的prim.hex为实际开发的MBRE加载器与SDK/支援支持,其他如boot等分区都是例程自动生成的。

         需要注意的是:烧写底包的prim.hex分区大小超过了ch2601缺省分区中prim大写的设置,因此,除了项目本身的分区配置需要修改外(参加附图4-1),可能要修改2601 SDK中,ch2601板支持包中的分区配置(参见附图4-2)。

image-20220512195111-1.png  


4-1 项目分区表修改

 

image-20220512195139-2.png  

4-2 SDK板级分区表修改

烧写成功后,请通过串口软件连接到RVB2601(实验使用的是CDK自带的串口窗口)。MBRE提供了CLI接口,通过串口输入app指令,即可看到mbre支持的命令,参见图4-3:

image-20220512195153-3.png  

4-2 MBRE串口app命令

  1. WEB服务器搭建

WEB服务器没有特殊要求,只需支持bin stream下载方式下的content-length标准下行内容。实验中使用了开源的nginx-1.21.6 windows版本,在win10系统下成功运行。其他开源web服务器如miniweb等也可运行。

安装好web服务器后,请做好服务器简单配置后启动,确认RVB2601通过连接的wifi网络应当能够访问到该服务器。

  1. APP安装与下载

附件中提供了测试动态下载的bin文件,请将bin文件拷贝到nginx的内容目录下,实验中,拷贝到了nginx-1.21.6\html目录下。此时,通过RVB2601 CLI串口命令, 输出

         app down  app_url     即可出发rvb2601下载应用

例如web 服务器IP地址为192.168.137.1,通过

app down http://192.168.137.1/01mbreu8g2.bin    即可下载web服务器上的01mbreu8g2.bin应用文件

       缺省配置下, app下载后会自动运行。可通过cli中app auto off关闭此项功能;

       因提供的app只用于测试目的,app退出的处理均不完善,若需要测试其他app,建议cli中输入reboot后,等RVB2601重启并连接成功wifi,再执行app down命令下载其他应用。

       提供测试的5个app介绍如下:

                 01mbreu8g2.bin:   本app只需RVB2601底板即可运行,使用的是开发板自带单色OLED,包括的内容是U8G2的显示测试用例;

image.png  

02mbredht11PA7.bin: 本app只需RVB2601底板即可运行,使用开发板自带OLED,同时,需接入DHT11温湿度单线传感器,传感器的信号线应当接至RVB2601 PA7引脚。例程通过DHT11实时获取温度和湿度信息;

 

image.png  

 

03tftdemo.bin: 本app需要外接TFT ILI9341 320X240 SPI 4线串口屏。其中,屏CLK接PA28, mosi接PA29,SS接PA7, dc接PA25. 该app为tft espi的显示测试例程,包括椭圆填充、星空、文字瀑布等子例程;

image.png  

04jpgtest.bin: 本app需要外接TFT(参考例子3),主要测试JPG解码器,对QVGA原始JPG进行解码并全屏显示,计算处理时间;

image.png  

        05smalldesktop.rel.bin: 网红小项目小电视的RVB2601移植版本,详细介绍参考此前发布的文章。

image.png  

 

 

五、作品源码

本次作品仅提供底包与测试用bin文件。

05smalldesktop.rel.bin (24.69 KB)
(下载次数: 0, 2022-5-12 19:56 上传)


04jpgtest.bin (39.67 KB)
(下载次数: 0, 2022-5-12 19:56 上传)


03tftdemo.bin (13.9 KB)
(下载次数: 0, 2022-5-12 19:56 上传)


02mbredht11PA7.bin (12.08 KB)
(下载次数: 0, 2022-5-12 19:56 上传)


01mbreu8g2.bin (24.54 KB)
(下载次数: 0, 2022-5-12 19:56 上传)


generated.rar (1.47 MB)
(下载次数: 3, 2022-5-12 19:55 上传)


 

六、视频演示(视频简介+链接)

1 MBRE动态加载开发流程演示

https://www.bilibili.com/video/BV1Vu411C7Do?spm_id_from=333.999.0.0

2 MBRE开发与动态加载小电视APP

https://www.bilibili.com/video/BV1Q44y1u7DL?spm_id_from=333.999.0.0

3 MBRE TFT DEMO运行

https://www.bilibili.com/video/BV1cZ4y187ir?spm_id_from=333.999.0.0

 

七、项目总结(项目文字总结+帖子分享链接汇总)

    1 【平头哥RVB2601创意应用开发】CDK开发环境简单应用经验分享

        2 【平头哥RVB2601创意应用开发】嵌入式开发,我比你快10倍 -- RVB动态加载模型MBRE

3 【平头哥RVB2601创意应用开发】动态加载模型超强测试用例:手撕网红项目小电视

4 【平头哥RVB2601创意应用开发】动态加载MBRE LED彩屏ILI9341 TFT的接线方法

5 【平头哥RVB2601创意应用开发】动态加载MBRE JPEG解码器移植源码与测试结果

6 【平头哥RVB2601创意应用开发】动态加载MBRE 一种秒级精度的NTP快速实现代码

 

八、其他

    1 关于CDK: 优缺分明。

优点:对比platformio、idf等平台来说,集成了编译、开发、package下载、jtag、模板工程生成等功能,简洁模块,入门门槛较小;

缺点:稳定性待提高,win10安装VS2002后导致CDK完全无法启动,没有错误提示,亦没有错误日志;CDK全英文界面对工程师很不友好(工程师一般都有英语能力,但中文界面显然会减少聚焦难度);与底层gcc等耦合度存在问题,部分情况下(如误用中文标点、多了花括号等)编译无任何具体错误提示,直接返回错误代码-2;大文件打开困难,作死机状;

建议:vscode等开源平台提供了良好的编辑与整合环境,如乐鑫、51、合宙等友商均提供了基于VSCODE的插件,或者支持platformio,其工作体验大大提升。强烈建议予以支持;

2 关于2601开发板: 配置不错,本人使用稳定性也还好。但预置的OLED分辨率较低,不能体现2601的处理能力;同时,价格低廉的SD/TF处理模块也缺乏。显示和存储是开发板重要的支撑功能,希望后续能完善;

3关于2601 SDK:SDK还需要完善,技术文档与支撑库还明显不足,如乐鑫等友商提供了包括ARDUINO框架在内的良好支持,强烈建议阿里也提供类似扩展框架,便于利用互联网广泛的开源资源。

4开放社区技术博客发布平台: 吐槽一下把, 在eeworld能发的内容,去了审核不过。除了外链不规范之类的正常原因,审核者对博客内容居然会有自行判断,会给出发布内容无价值的评价。实质上,只要不违反国家法律法规和竞争性要求,博客具体内容是每个开发者的自我思想与总结,即使个人技术未有完美,分享也是值得赞赏的事情。审核者对博客内容的价值动辄加以个人判断,在我看来匪夷所思。作为一个大平台,兼收并蓄似乎是一种更包容的态度。

 

【平头哥RVB2601创意应用开发】动态加载MBRE验证系统.doc (7.99 MB)
(下载次数: 1, 2022-5-12 19:58 上传)

 

本帖最后由 cqcqwind 于 2022-5-13 10:32 编辑

回复评论 (5)

为什么叫平头哥呢
点赞  2022-5-13 09:12

感谢大佬的分享,有关内容同步审核的问题,实在抱歉给您带来了不好的体验,我们这边也了解了整体的情况。首先您和其他开发者总结和分享的开发经验肯定是有价值的,我们已经就您反馈的问题作了讨论并优化了审核的流程。如果后续还有相关的意见和建议,欢迎您直接联系我。

点赞  2022-5-13 11:11

我也很感兴趣你这个在自建的WEB服务器中实现空中升级功能,编译到RVB2601下载并运行,速度很快,感觉很爽啊,,,,先下载你的代码看看,不过应该比较复杂,到时有问题再来请教啊。。。

点赞  2022-6-8 09:24

问题来了,下功的并不是源码,只是一些hex文件,那么我要如何动态加载呢???

点赞  2022-6-8 10:37
引用: WZH70246 发表于 2022-5-13 09:12 为什么叫平头哥呢

因为平头哥是最无所畏惧的动物,吃毒蛇就像是吃辣条,被咬了睡一觉起来接着吃,还喜欢吃蜂密,还能干掉蜥蜴!

 

别看他个子小,狮子老虎也拿它没办法!

点赞  2022-6-9 11:45
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复