在使用USB OTG将“自己移植的固件”烧写到eMMC中时,串口会输出“Boot interface 6 not supported”,发现很多人踩坑,我也一样。
见下图:
解决办法:
1、打开终端
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd linux回车”,切换“linux”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd atk-mp1/回车”,切换“atk-mp1”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd alientek_tf-a回车”, 切换“alientek_tf-a”目录下。
输入“ls回车”,列出当前目录下所有的文件和文件夹
2、修改“Makefile.sdk”
1)、输入“vim Makefile.sdk回车”,使用vim命令打开已有的“Makefile.sdk”文件
因为
ST公司官方用的交叉编译器是“arm-ostl-linux-gnueabi-gcc”;
正点原子用的交叉编译器是“arm-none-linux-gnueabihf-gcc”
所以,我们要修改Makefile.sdk文件。
“tf-a-stm32mp-2.2.r1”是正点原子针对自己的STM32MP157开发板修改过的 TF-A源码。“Makefile.sdk”是我们用来编译正点原子的TF-A源码要用到的 Makefile。
2)、将EXTRA_OEMAKE=CROSS_COMPILE=arm-none-linux-gnueabihf- DEBUG=1 LOG_LEVEL=40 PLAT=stm32mp1 ARCH=aarch32 ARM_ARCH_MAJOR=7 STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_SPI_NOR=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1
3)、EXTRA_OEMAKE_SERIAL=$(filter-out STM32MP_SDMMC=1 STM32MP_EMMC=1 STM32MP_SPI_NOR=1 STM32MP_RAW_NAND=1 STM32MP_SPI_NAND=1,$(EXTRA_OEMAKE)) STM32MP_UART_PROGRAMMER=1 STM32MP_USB_PROGRAMMER=1
见下图:
4)、将“TFA_DEVICETREE ?= stm32mp157a-dk1 stm32mp157d-dk1 stm32mp157c-dk2 stm32mp157f-dk2 stm32mp157c-ed1 stm32mp157f-ed1 stm32mp157a-ev1 stm32mp157c-ev1 stm32mp157d-ev1 stm32mp157f-ev1 stm32mp157d-atk”注释掉,只用“TFA_DEVICETREE ?= stm32mp157d-atk”,目的是:关闭多个STM32MP1开发板的TF-A镜像,只保留正点原子的开发板的TF-A镜像。
见下图:
5)、按“ESC键”+“:wq键”,保存退出。
3、单独编译生成“tf-a-stm32mp157d-atk-serialboot.stm32”
1)、输入“cd tf-a-stm32mp-2.2.r1/回车”,进入“tf-a-stm32mp-2.2.r1”目录下,
输入“make -f ../Makefile.sdk clean回车”,清除以前的编译
输入“make -f ../Makefile.sdk TFA_DEVICETREE=stm32mp157d-atk TF_A_CONFIG=serialboot ELF_DEBUG_ENABLE='1' all -j回车”,要求单独生成“tf-a-stm32mp157d-atk-serialboot.stm32”,这一句非常重要。
注意:
不能使用“make -f ../Makefile.sdk all回车”来编译,否则在烧录程序时串口会报“Boot interface 6 not supported”问题。
输入“cd ..回车”,进入“alientek_tf-a”目录下
输入“cd ..回车”,进入“alientek_tf-a”目录下
输入“cd build/回车”,切换到“build”目录下;
输入“ls回车”,列出当前目录下所有的文件和文件夹
此时,我们注意到只有一个“serialboot”目录
输入“cd serialboot/回车”,切换“serialboot”目录下
输入“ls -l回车”,列出当前目录下所有的文件和文件夹
将“tf-a-stm32mp157d-atk-serialboot.stm32”保存好,以后就这个文件可以了。
打开FileZilla,把“tf-a-stm32mp157d-atk-serialboot.stm32”保存到“D:\Linux安装”
5、烧录
1)、关闭虚拟机,防止开发板连接到虚拟机
2)、将开发板上拨码开关拨到“000”位置
3)、将USB导线连接电脑的USB3.0接口,另外一端连接开发板的USB OTG接口;
4)、将USB导线连接电脑的USB3.0接口,另外一端连接到开发板的USB TTL接口;
5)、双击“STM32CubeProgrammer”图标
6)、选择上图中的USB,然后点击“Connect”
7)、点击“刷新”,直到出现USB1,表示连接成功。
8)、点击“Open file”,找到“C:\Program Files\STMicroelectronics\images”目录下“tf-a.tsv”打开。
9)、点击“Browse”,打开“C:\Program Files\STMicroelectronics\images”目录。
10)、点击“选择文件夹”
11)、点击“Download”
12)、点击“确定”
13)、关电,将拨码开关设置为“010”
14)、上电,重新启动开发板。
6、串口输出结果