你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32MP1的M4 固件装载和双机通信

[复制链接]
STMCU-管管 发布时间:2021-6-2 14:16
继续研究STM32MP157C 开发板,程序员研究开发板和教师不同,不会面面俱到,往往是带着问题去寻找解决之道。


实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题
·M4 程序的开发和下载,
·cortex_A 处理器和cortex-M4 之间的通信

毕竟,我们是冲着异构处理器架构来的。


本文参考:STM32MP157——Remoteproc和RPMsg 一文


1.生成M4固件
理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配置。
1.png
  可以使用STM32CubeIDE来配置M4的引脚,并且开发相关的应用程序.

2.M4固件的装入方式
M4 固件下载的方式有两种


工程模式(Engineering Mode)


类似于使用ST-LINK仿真器将STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。。


产品模式(Production Mode)


   M4 的程序存放在A7的 linux 系统的文件中,A7核先启动后,通过remoteproc 的软件引导M4核启动,固件加载执行。


我更倾向一开始就直接使用生产方式。


3 remoteproc 机制
  Remoteproc(Remote Processor Framework),主要作用就是对远程处理器(也就是M4)的生命周期进行管理,即启动、停止远程处理器。
3.png
实际操作时,可以使用开发板上现成的linux 命令行来实现。state powering 等等。在米尔开发板中使用fw_cortex_m4.sh


不过,米尔科技开发板上相关的文件目录和其说明书不同,埋的够深的。


root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls
README        fw_cortex_m4.sh  lib
而且在lib 中已经放置了OpenAMP_TTY_echo.elf 文件,倒也是满贴心的。


4 cortex-A 和cortex-M 之间的信息交换RPMsg框架
两个处理器之间的信息交换是使用RPMsg框架来实现的。
2.png
从图上看,进一步地是采用openAMP 来实现。ST 公司在A7 端将处理器信息交换仿真成为一个TTY 终端。而在M4 端仿真成为虚拟UART 。于是,两个处理器之间的通信变成了串口通信那么简单直接。只是这个串口的速度非常块,因为他们完全是在内存完成的。


5 测试
先要运行fw_cortex_m4.sh

  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ./fw_cortex_m4.sh start
  2. fw_cortex_m4.sh: fmw_name=OpenAMP_TTY_echo.el
复制代码
才能在/dev目录中看到ttyRPMSG0和ttyRPMSG1 虚拟终端。
  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls -l /dev/ttyRPMSG*
  2. crw-rw---- 1 root dialout 5, 3 Apr  9 11:50 /dev/ttyRPMSG0
  3. crw-rw---- 1 root dialout 5, 4 Apr  9 12:56 /dev/ttyRPMSG1
  4. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG0
  5. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG0 &
  6. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG1
  7. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG1 &
  8. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART0" >/dev/ttyRPMSG0
  9. hello virtual UART0
  10. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART1" >/dev/ttyRPMSG0
  11. hello virtual UART1
复制代码
就这样了,下面测试STM32Cube IDE 编译M4 程序。


文章来自:姚家湾

收藏 评论0 发布时间:2021-6-2 14:16

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版