【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
树莓派4b从广义上来说,它本身就是一个mini小电脑。我们需要什么软件,就可以apt install去下载即可。这和之前嵌入式linux开发方式有很大的不同。因为很早之前的嵌入式linux开发,都是自己从uboot、device tree、kernel、rootfs一步一步编译而来的,甚至于需要什么第三方软件,还要自己去编译、开发。mcu则不同,对于mcu而言,基本上不存在复杂的第三方软件,一般都是个人包圆了,甚至于个人硬件、软件一条龙去实现,也不是不可能。所以这里,我们从树莓派4b的角度看,两者应该怎么配合。
1、通信方式
要说通信,最主要的通信方式还是232。本着越简单、越稳定的原则,如果对数据量本身没有太大的需求,那么还是用232这种方式进行通信比较稳妥。当然,通信方式只是第一步,通信后面的协议定义也是非常重要的。这里假定mcu也是我们自己开发的,所以协议通信这部分不是什么难点。
2、升级方式
树莓派4b升级是比较容易的,因为它上面是上位机,上位机和它之间可以通过网络相连。但是mcu不一样,一般来说,树莓派和mcu之间只有串口通信的部分。所以,如果想要对mcu升级,首先是把firmware下载到树莓派上面,然后通过树莓派给mcu升级固件。
当然这个时候,树莓派一般会对mcu发起一个重启的命令。mcu启动过程中,在确认需要update固件之后,就会进入升级状态,一步一步下载固件,最后重新启动最新的固件代码。当然现在很多的mcu也支持蓝牙,通过蓝牙下载也不是不可以,不过总觉得没有232放心。
3、功能交互
树莓派上层对mcu的功能访问主要体现在这三个地方。第一个是固件升级,刚才已经讨论过。第二个是状态确认,如果固件有什么问题,那么需要通过树莓派的网络,及时向上report出来,毕竟大部分mcu不会自带网络的。第三个就是控制命令的下发,复杂的算法一般都是树莓派上计算好的,mcu拿到这个结果之后直接做对应的动作就可以了。如果mcu内部也有对应的算法,比如pid、mpc、lqr等等,最好直接通过串口和pc相连,然后进行标定和测试,这个时候就不要借助于树莓派转手一下了。
4、功能划分
树莓派偏重于网络通信和算法计算,而mcu偏重于运动控制和结果执行。两者的定位是不一样的,两者之间无法相互取代的。像slam、camera图像、ai、视频编解码、3d、丰富网络协议、复杂图形界面,这些mcu干不了;实时运动控制,树莓派也做不了,除非它其他什么也不干。真的不需要算法计算的话,直接上位机连接mcu就好了,自然就不需要树莓派了。因此在前期验证和调试的时候,两者可以分开来开发。等到最终作为产品调试的时候,再merge到一起,这是比较合适的处理办法。
像树莓派这种板子,自身就是linux系统,上面的软件代码任务会比较重一点,有可能会牵涉到不同的部门和开发人员。而mcu相对而言,功能单一,软件和硬件有可能都是同一个人开发的。所以这个时候,大家只要明确彼此之间的功能接口,就算人员很多,开发起来一般问题不大。
5、把接口的划分落实到文档上面
树莓派的软件一般比较多,开发人员也就比较多;mcu的软件相对较少,所以开发人员也比较少。但真正树莓派接口层,和mcu的接口层,对接的内容未必有那么多。但是哪怕东西再少,也要转成一个标准的文档。只有变成专业的文档,大家才能对协议、接口、参数、流程等彼此之间需要协同的东西了然于心,而不是你做你的,我做我的。
其他:
事实上除了mcu之外,有的时候soc还会和fpga进行协作。当然,通信的方式一般就是spi、232这样居多,zynq之类的fpga+soc组合体另当别论。一些对采样、控制和实时性有要求的场合,用fpga还是非常方便的。