动态加载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)方向发展,特点如下:
本项目即是在RVB2601 RISCV开发板为基础,所开发的一套探索从SOC软件模式转换为SOC APP应用模式的验证系统。
传统的SOC软件开发中,系统(system)和应用(application)的逻辑一般是整合在一起的。IOT MCU的功能提升,使得这一整合模型的限制愈发明显:
MBRE(Mini Binary Runtime Enviroment)作为本次作品,提供了RVB2601平台上动态加载能力的验证系统环境,能够在E906 RISCV上提供完整的应用(app)生成, app打包,app动态下载,app动态运行等原型验证功能。使得RVB2601能够突破现有SOC开发模式,转而像PC或者手机一样开发、装载、运行应用。迄今为止,尚未见到国内IOT MCU厂商提供类似MBRE功能的实际实现。(附注:乐鑫在其IDF中提及了提供esp系列ELF RAM加载功能,通过项目menuconfig可以看到选项,但只标注为实验性experimental功能,尚未提供正式发布的文档或者例程)。
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系统搭建方法如下:
附件中提供了MBRE基础功能的RVB2601底包,该底包应烧写到2601 FLASH中。底包基于2601的网络MP3播放例程修改,因2601烧写单一分区的命令行和处理流程尚不明确,故烧写时,若有必要,可借助上述工程辅助烧写。烧写底包的prim.hex为实际开发的MBRE加载器与SDK/支援支持,其他如boot等分区都是例程自动生成的。
需要注意的是:烧写底包的prim.hex分区大小超过了ch2601缺省分区中prim大写的设置,因此,除了项目本身的分区配置需要修改外(参加附图4-1),可能要修改2601 SDK中,ch2601板支持包中的分区配置(参见附图4-2)。
4-1 项目分区表修改
4-2 SDK板级分区表修改
烧写成功后,请通过串口软件连接到RVB2601(实验使用的是CDK自带的串口窗口)。MBRE提供了CLI接口,通过串口输入app指令,即可看到mbre支持的命令,参见图4-3:
4-2 MBRE串口app命令
WEB服务器没有特殊要求,只需支持bin stream下载方式下的content-length标准下行内容。实验中使用了开源的nginx-1.21.6 windows版本,在win10系统下成功运行。其他开源web服务器如miniweb等也可运行。
安装好web服务器后,请做好服务器简单配置后启动,确认RVB2601通过连接的wifi网络应当能够访问到该服务器。
附件中提供了测试动态下载的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的显示测试用例;
02mbredht11PA7.bin: 本app只需RVB2601底板即可运行,使用开发板自带OLED,同时,需接入DHT11温湿度单线传感器,传感器的信号线应当接至RVB2601 PA7引脚。例程通过DHT11实时获取温度和湿度信息;
03tftdemo.bin: 本app需要外接TFT ILI9341 320X240 SPI 4线串口屏。其中,屏CLK接PA28, mosi接PA29,SS接PA7, dc接PA25. 该app为tft espi的显示测试例程,包括椭圆填充、星空、文字瀑布等子例程;
04jpgtest.bin: 本app需要外接TFT(参考例子3),主要测试JPG解码器,对QVGA原始JPG进行解码并全屏显示,计算处理时间;
05smalldesktop.rel.bin: 网红小项目小电视的RVB2601移植版本,详细介绍参考此前发布的文章。
五、作品源码
本次作品仅提供底包与测试用bin文件。
六、视频演示(视频简介+链接)
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能发的内容,去了审核不过。除了外链不规范之类的正常原因,审核者对博客内容居然会有自行判断,会给出发布内容无价值的评价。实质上,只要不违反国家法律法规和竞争性要求,博客具体内容是每个开发者的自我思想与总结,即使个人技术未有完美,分享也是值得赞赏的事情。审核者对博客内容的价值动辄加以个人判断,在我看来匪夷所思。作为一个大平台,兼收并蓄似乎是一种更包容的态度。
本帖最后由 cqcqwind 于 2022-5-13 10:32 编辑
感谢大佬的分享,有关内容同步审核的问题,实在抱歉给您带来了不好的体验,我们这边也了解了整体的情况。首先您和其他开发者总结和分享的开发经验肯定是有价值的,我们已经就您反馈的问题作了讨论并优化了审核的流程。如果后续还有相关的意见和建议,欢迎您直接联系我。
引用: WZH70246 发表于 2022-5-13 09:12 为什么叫平头哥呢
因为平头哥是最无所畏惧的动物,吃毒蛇就像是吃辣条,被咬了睡一觉起来接着吃,还喜欢吃蜂密,还能干掉蜥蜴!
别看他个子小,狮子老虎也拿它没办法!