【北京迅为】《STM32MP157开发板使用手册》- 第三十五章 A7 和 M4 联合调试

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7+单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板+底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐用,可满足高速信号环境下使用。共240PIN,CPU功能全部引出:底板扩展接口丰富底板板载4G接口(选配)、千兆以太网、WIFI蓝牙模块HDMI、CAN、RS485、LVDS接口、温湿度传感器(选配)光环境传感器、六轴传感器、2路USB OTG、3路串口,CAMERA接口、ADC电位器、SPDIF、SDIO接口等


第三十五章 A7 M4 联合调试

在前面的几个章节之中,我们一直所使用的都是通过仿真器,将程序下载到 SRAM中运行,开发板掉电后程序就会丢失,这种方式适合在 Cortex-M4 开发调试阶段,也叫工程模式(Engineering Mode)。而当我们在实际的使用过程中,这样明显是不可以的,而本章节将会讲解如何在 Linux 操作系统中使用 Cortex-A7 去加载、启动和停止运行Cortex-M4 的固件。

35.1 调试前的准备工作

 首先最实现联合调试的基本要求:

  1. 必须使用yocto文件系统
  2. 连接串口线和otg线和对应的LINK调试器

Yocto文件系统的存放路径为“iTOP-STM32MP157开发板网盘资料汇总\03_文件系统源码和镜像\06_yocto文件系统\04_烧写镜像文件\image”,将该镜像烧写到TF卡或者EMMC中,烧写完成之后,将拨码开关设置为对应的启动模式,进入uboot倒计时之后,按下任意键,进入uboot命令行,如下图所示:

我们接下来输入以下命令

setenv bootsystem yocto

saveenv

 

 

设置启动系统为yocto并且将设置保存,然后输入reset命令重启系统,重启完成进入系统如下图所示: 

该文件系统,会默认虚拟一个usb网卡,通过otg线连接到电脑上,我们使用命令“ifconfig”来查看开发板的网络设备列表,如下图所示: 

然后打开Windows端的设备管理器,我们测试应该会有以下三个设备,分别为

1 ) CH340 开发板的打印串口设备

2 ) ST-Link 仿真器调试设备

3 ) remote NDIS USB虚拟网卡设备  

如下图所示:

至此我们调试前的准备工作就完成了。

35.2 使用 STM32CubeIDE 进行调试 

在这里,我们以按键工程来进行A7和M4联合调试的例子,打开工程之后如下图所示:

 

首先我们需要设置串行过滤器,因为默认情况下,STM32CubelDE是只将 STMicroelectronics 和 FTDI 设备作为首选的串行设备,其它设备无法识别,所以我们要关闭默认选项而选择我们需要的设备,点击Windows菜单栏下的preferences(偏好)选项,进入preferences界面,如下图所示:

然后我们选择STM32Cube进入MPU Serial菜单栏,勾选Remove filter 然后选择我们的CH340对应的端口,作者这里为COM3,选择完成之后点击右下角的Apply and Close,如下图所示: 

应用之后,回到初始界面,我们点击爬虫debug旁的小三角,点击Debug Configurations,进入debug设置界面,如下图所示: 

然后我们点击 KTY_CH4 DEBUG 进入该工程的配置界面,选择调试器窗口。Load mode 选择为thru Linux core,连接端口选择为我们的打印串口COM3(这里可能会找不到设备,原因为该版本的STM32Cubeide自身的bug问题,需要降低版本,低版本的存放路径为“iTOP-STM32MP157开发板网盘资料汇总\01_开发所需PC软件\12_STM32CubeIDE软件”下的st-stm32cubeide_1.4.0_7511_20200720_0928_x86_64.exe),Inet Address 已经默认为我们设置好了,不需要我们进行设置,然后我们点击debug按钮,如下图所示: 

接下来会弹出以下界面,我们选择同意点击yse即可: 

随后会出现load 进度条窗口,等待文件传输完成,如下图所示: 

加载完成之后,回到我们的串口终端界面,会显示如下信息: 

至此我们的KEY工程就加载完成了,此时,按下VOL-可以看到LED3状态反转,按下BACK按键可以看到BEEP蜂鸣器状态反转。如果我们想停止程序的运行,只需要回到STM32CubeIDE软件,点击红色方块结束程序的调试即可,如下图所示。 

35.3 手动调试

在上面的两个小节中,我们使用了STM32CubeIDE软件进行调试,这样确实通过A7核来启动了M4核心的例程,但是这样操作也是不方便的,需要STLINK调试,还需要虚拟网卡将M4工程传递到开发板上,本小节所实现的是通过对应的脚本来实现M4核的应用开启和结束,而且不再局限于yocto系统,不再需要USB虚拟网卡。

首先我们要知道STLINK是如何进行调试的,来到STM32CubeIDE软件的项目列表,可以看到KEY_CM4工程下的RemoteProc目录下有一个 fw_cortex_m4.sh脚本文件,STM32CubeIDE软件正是通过该脚本来对程序进行调试。

打开该脚本之后,内容如下: 

  1 #!/bin/sh
  2 rproc_class_dir="/sys/class/remoteproc/remoteproc0"
  3 fmw_dir="/lib/firmware"
  4 fmw_name="KEY_CM4.elf"
  5 
  6 cd $(/usr/bin/dirname $(/usr/bin/readlink -f $0))
  7 
  8 if [ $1 == "start" ]
  9 then
 10         # Start the firmware
 11         if [ -f /lib/firmware/$fmw_name ]; then
 12                 /bin/rm -f /lib/firmware/$fmw_name
 13             if [ $? -ne 0 ]; then
 14                 exit 1
 15             fi
 16         fi
 17         /bin/ln -s $PWD/lib/firmware/$fmw_name $fmw_dir
 18         if [ $? -ne 0 ]; then
 19             exit 1
 20         fi
 21         /bin/echo -n "$fmw_name" > $rproc_class_dir/firmware
 22         /bin/echo -n start > $rproc_class_dir/state
 23 fi
 24 
 25 if [ $1 == "stop" ]
 26 then
 27         # Stop the firmware
 28         /bin/echo -n stop > $rproc_class_dir/state
 29 fi

下面将对该部分代码进行部分讲解。

首先2-4行定义了三个变量,分别为rproc_class_dir、fmw_dir、fmw_name,rproc_class_dir是加载、启动和停止固件的文件操作路径fmw_dir是我们工程固件存放的路径,而fmw_name正是我们工程固件的名称信息。我么先来到工程固件存放的路径下也就是/lib/firmware目录下如下图所示:

可以看到我们在上一小节中通过STM32CubeIDE烧录进的KEY_CM4.elf固件。然后我们使用命令“ls -l”,查看文件的链接信息,如下图所示:

 

可以看到我们的KEY_CM4.elf固件是从/usr/local/projects/KEY_CM4/lib/firmware/路径下的KEY_CM4.elf文件链接来的。我们来到/usr/local/projects/KEY_CM4路径下,如下图所示,会发现该目录下会存在一个fw_cortex_m4.sh文件,查看文件信息之后会发现该文件正是我们正在解释的文件。

随后的第六行命令正是来到fw_cortex_m4.sh文件所在的目录下。

之后的内容就比较简单,分为了两种情况,分别为start和stop分别代表了固件的开启和结束。既然我们几经了解到了固件的启动和停止,那我们现在要解决的问题是,如何不通过STM32CubeIDE来调试固件,首先KEY_CM4.elf文件是我们一定要拷贝到开发板的,再上一章节中,我们是通过usb虚拟网卡来拷贝的,而本小节我们为了方便可以直接通过U盘或者TF卡来拷贝KEY_CM4.elf文件,固件存放的路径为每一个工程目录下的CM4/Debug文件夹下,如下图所示:

将该固件KEY_CM4.elf拷贝到开发板上,拷贝完成如下图所示: 

然后我们在开发板的同一目录下,使用命令“vi fw_m4_itop.sh”建立fw_m4_itop.sh文件,然后仿照fw_cortex_m4.sh文件来改写一个适合我们当前状况的脚本文件,为了方便起见我们将该脚本存放在了“iTOP-STM32MP157开发板网盘资料汇总\06_Cortex-M4实验例程”路径下,内容如下:

#!/bin/sh
 rproc_class_dir="/sys/class/remoteproc/remoteproc0"
 if [ $2 == "start" ]
 then
  /bin/echo -n $1 > $rproc_class_dir/firmware
  /bin/echo -n start > $rproc_class_dir/state
 fi
 if [ $2 == "stop" ]
 then
  /bin/echo -n stop > $rproc_class_dir/state
 fi

内容添加完成之后,保存退出,,然后使用命令“chmod 777 fw_m4_itop.sh”给予fw_m4_itop.sh权限,如下图所示:

然后我们使用命令

 ./fw_m4_itop.sh KEY_CM4.elf start

来运行KEY_CM4.elf固件,如下图所示:

 

此时,按下VOL-可以看到LED3状态反转,按下BACK按键可以看到BEEP蜂鸣器状态反转。如果我们想停止程序的运行,只需要再使用以下命令即可,如下图所示:

 ./fw_m4_itop.sh KEY_CM4.elf stop

 

此时该固件就会停止运行。该脚本的第一个参数为固件名称,第二个参数为对应的start运行和stop停止。

至此我们呢的A7和M4联合调试的内容就结束了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值