0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ST官方基于米尔STM32MP135开发板培训课程(二)

米尔电子 2023-08-03 08:01 次阅读

本文将以Myirtech的MYD-YF13X以及STM32MP135F-DK为例,接上篇培训课程继续讲解如何使用STM32CubeMX结合Developer package实现最小系统启动。

eb1a792e-3190-11ee-bbcf-dac502259ad0.png


4.USB启动

USB启动用于烧录镜像到外部flash, 例如NAND,SD卡等,从PC端烧录镜像到外部Flash是由U-Boot结合STM32CubeProgrammer完成的,配置并编译U-Boot是烧录的前提,根据STM32MPU的启动顺序:

TF-A->OP-TEE->U-BOOT->Linux Kernel

将U-Boot 加载到DDR中又依赖于TF-A与OP-TEE,所以USB启动阶段需要完成TF-A,OP-TEE以及U-Boot的配置及编译。

4.1 USB启动:TFA 配置及编译

在USB启动阶段,TFA需要配置的外设有:调试串口UART时钟RCC,电源以及DDR。

4.1.1 调试串口 UART

1.查看原理图,找到调试串口:

ebb7673e-3190-11ee-bbcf-dac502259ad0.png

ebe7c8b6-3190-11ee-bbcf-dac502259ad0.png

2.使能UART4,配置引脚以及时钟:

ec160226-3190-11ee-bbcf-dac502259ad0.png

ec3835ee-3190-11ee-bbcf-dac502259ad0.png

ec55dc8e-3190-11ee-bbcf-dac502259ad0.png

Notes:这里边USART4的时钟选择用HSI,一个原因是参考了STM32MP135F-DK的时钟树配置,另一个原因是考虑到低功耗工作模式下有串口唤醒的应用。排除这两点其他的时钟源也可以使用。

3.点击“Generatecode”, 并添加TFA阶段的串口配置的usercode.

打开生成的STM32CubeMX工程,打开TF-A设备树(stm32mp135d-myir_bring_up-mx.dts),在”USER CODE BEGIN root”位置添加”chosen”和”aliases”节点:

/* USER CODE BEGIN root */ aliases { serial0 = &uart4; }; chosen { stdout-path = "serial0:115200n8"; }; /* USER CODE END root */

4.(Optional)编译TFA USB image,并部署到板子。

编译:

PC$> cd -a-stm32mp-v2.6-stm32mp-r2_path>PC$> source PC $>make -f ../Makefile.sdk TF_A_CONFIG=usb TF_A_DEVICETREE=stm32mp135d-myir_bring_up-mx stm32

部署(部署前请确认板子上电,串口线以及USB线正确连接):

PC $>STM32_Programmer_CLI -c port=usb1 -d ../deploy/tf-a-stm32mp135d-myir_bring_up-mx-usb.stm32 0x1 -s 0x1

串口打印:

NOTICE: CPU: STM32MP135F Rev.?NOTICE: Model: STMicroelectronics custom STM32CubeMX board - openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23ERROR: nvmem node board_id not foundWARNING: VDD unknownINFO: Reset reason (0x35):INFO: Power-on Reset (rst_por)INFO: FCONF: Reading TB_FW firmware configuration file from: 0x2ffe0000INFO: FCONF: Reading firmware configuration information for: stm32mp_ioINFO: Using USBINFO: Instance 2INFO: Boot used partition fsbl1NOTICE: BL2: v2.6-stm32mp1-r2.0(debug):v2.6-stm32mp-r2-4-g2dedc1cf0-dirty(2dedc1cf)NOTICE: BL2: Built : 02:45:42, Jun 6 2023INFO: BL2: Doing platform setupERROR: Invalid DDR init: error -22PANIC at PC : 0x2ffe7739Exception mode=0x00000016 at: 0x2ffe7739

5.Troubleshooting

如果串口打印上一步串口打印如下或者没有任何打印:

PANIC at PC : 0x2ffe7739Exception mode=0x00000016 at: 0x2ffe7739

那么请确认:

Usercode是否已经添加到正确的位置。

DEBUG串口是否是UART4,并且确认PIN脚是否正确配置。

检查硬件连接。

4.1.2 DDR

DDR的配置需要注意以下几点:

SDRAMS大小

One/two pieces (16/32 bits), STM32MP13x DDR是16bits, 所以这里的配置都是1片SDRAM

DDR型号, DDR3/DDR3L/LPDDRx

DDR频率

1.查看DDR设计部分原理图,确认大小以及频率等参数,完成DDR部分设计

下面列举几种DDR的不同设计与相对应的配置:

Example1:STM32MP157C-EV1,2片SDRAM, 32bits, 1GBytes

ec74950c-3190-11ee-bbcf-dac502259ad0.png

ecb62c88-3190-11ee-bbcf-dac502259ad0.png

ecfcff6e-3190-11ee-bbcf-dac502259ad0.png

ed180cf0-3190-11ee-bbcf-dac502259ad0.png

DDR的频率可以在时钟配置界面进行配置。

Example2: STM32MP135F-DK, 1片SDRAM,16bits, 512Mbytes.

ed43c052-3190-11ee-bbcf-dac502259ad0.png

ed79d07a-3190-11ee-bbcf-dac502259ad0.png

edb9e6ec-3190-11ee-bbcf-dac502259ad0.png

ede3b0bc-3190-11ee-bbcf-dac502259ad0.png

最后,来看一下Myir板子的DDR部分设计:

edfb8318-3190-11ee-bbcf-dac502259ad0.png

ee201e94-3190-11ee-bbcf-dac502259ad0.png

1片SDRAM, 16bits, 256Mbytes, STM32CubeMX配置如下:

ee4c6a6c-3190-11ee-bbcf-dac502259ad0.png

ee808f18-3190-11ee-bbcf-dac502259ad0.png

2.DDR时钟配置(由于RCC部分还没有配置外部时钟,所以这里先用内部HSI作为时钟源)

eeac1dd6-3190-11ee-bbcf-dac502259ad0.png

eec55058-3190-11ee-bbcf-dac502259ad0.png

3.点击“GenerateCode”

4.(Optional)编译TF-A USB image,并部署到板子

编译:

PC$> cd -a-stm32mp-v2.6-stm32mp-r2_path>PC$> source PC $>make -f ../Makefile.sdk TF_A_CONFIG=usb TF_A_DEVICETREE=stm32mp135d-myir_bring_up-mx stm32

部署(部署前请确认板子上电,串口线以及USB线正确连接):

PC $>STM32_Programmer_CLI -c port=usb1 -d ../deploy/tf-a-stm32mp135d-myir_bring_up-mx-usb.stm32 0x1 -s 0x1

串口打印:

NOTICE: CPU: STM32MP135D Rev.YNOTICE: Model: STMicroelectronics custom STM32CubeMX board - openstlinux-5.15-yocto-kirkstone-mp1-v22.11.23ERROR: nvmem node board_id not foundWARNING: VDD unknownINFO: Reset reason (0x30):INFO: Reset due to a failure of VDD_COREINFO: FCONF: Reading TB_FW firmware configuration file from: 0x2ffe0000INFO: FCONF: Reading firmware configuration information for: stm32mp_ioINFO: Using USBINFO: Instance 2INFO: Boot used partition fsbl1NOTICE: BL2: v2.6-stm32mp1-r2.0(debug):()NOTICE: BL2: Built : 1030, Jun 28 2023INFO: BL2: Doing platform setupINFO: RAM: DDR3-DDR3L 16bits 533000kHzINFO: Memory size = 0x10000000 (256 MB)INFO: DFU USB START...INFO: handle USB : Suspend intINFO: USB Suspend modeINFO: handle USB : ResetINFO: handle USB : Reset

从上面的log可以看出,DDR初始化成功,tfa失败在下载FW config文件的位置

Notes如果客户的供电设计不是分离式电源,而是采用PMIC供电,那么对应的串口打印应该是:

NOTICE: CPU: STM32MP135F Rev.?NOTICE:

Model: STMicroelectronics custom STM32CubeMX boardERROR: nvmem node board_id not foundWARNING: VDD unknownINFO: Reset reason (0x35):INFO: Power-on Reset (rst_por)INFO:

FCONF: Reading TB_FW firmware configuration file from: 0x2ffe0000INFO: FCONF: Reading firmware configuration information for:

stm32mp_ioINFO: Using USBINFO: Instance 2INFO: Boot used partition fsbl1NOTICE: BL2: v2.6-stm32mp1-r2.0(debug):

v2.6-stm32mp-r2-5-g38bff70d8-dirty(38bff70d)NOTICE: BL2: Built :

0312, Jun 6 2023INFO: BL2: Doing platform setupINFO: RAM: DDR3-DDR3L 16bits 533000kHzERROR:

DDR addr bus test: can't access memory @ 0xc0000004PANIC at PC :

0x2ffe5db1Exception mode=0x00000016 at: 0x2ffe5db1

从硬件设计的角度看,目前软件配置所涉及到的硬件区别主要是供电部分,采用分离式电源,板子一上电,每一个DC-DC均有输出,不需要软件控制,也就是说,只要板子上电,DDR供电就已经存在了;而采用PMIC,我们以STM32MP135F-DK板为例看一下DDR供电部分的设计:

eee13b56-3190-11ee-bbcf-dac502259ad0.png

ef06ca38-3190-11ee-bbcf-dac502259ad0.png

从原理图可以看出PMIC的BUCK2用于给DDR供电,同时参考PMIC的数据手册,BUCK2的启动顺序是Rank0级别,而Rank0上电之后默认是没有输出的,需要软件驱动,所以,如果客户采用的是PMIC供电,那么接下来需要配置PWR,I2C以及PMIC (见3.1.3)。

5.Troubleshooting

Log:

NOTICE: CPU: STM32MP135D Rev.YNOTICE: Model: STMicroelectronics custom STM32CubeMX boardERROR: nvmem node board_id not foundWARNING: VDD unknownINFO: Reset reason (0x35):INFO: Power-on Reset (rst_por)INFO: FCONF: Reading TB_FW firmware configuration file from: 0x2ffe0000INFO: FCONF: Reading firmware configuration information for: stm32mp_ioINFO: Using USBINFO: Instance 2INFO: Boot used partition fsbl1NOTICE: BL2: v2.6-stm32mp1-r2.0(debug):v2.6-stm32mp-r2-2-g3e0dafdaf(3e0dafda)NOTICE: BL2: Built : 0548, Jun 5 2023INFO: BL2: Doing platform setupINFO: RAM: DDR3-DDR3L 16bits 533000kHzERROR: DDR expected freq 533000 kHz, current is 224000 kHzPANIC at PC : 0x2ffe588f

解析:如果出现如上打印,请查看DDR时钟配置情况,一种可能是PLL2没有使能,可以通过CubeMX的”ClockConfiguration”进行确认:AXI Clock的source没有切换到PLL2P

ef551bb6-3190-11ee-bbcf-dac502259ad0.png

或者可以查看生成的设备树rcc节点部分的配置是否有PLL2的配置出现:

efb57e48-3190-11ee-bbcf-dac502259ad0.png


4.1.3 PWR

电源设计通常就是两种,像Myir采用的分离式供电和ST demo板采用的电源管理芯片STPMIC供电,下面将分别介绍两种情况下的设备树配置。

I.由于之前采用PMIC供电DDR初始化会失败,所以这里先以STM32MP135F-DK为例来看一下PMIC以及PWR部分的配置:

首先看一下原理图:

efcd6bb6-3190-11ee-bbcf-dac502259ad0.png

首先配置用于驱动PMIC的I2C,默认使用的是I2C4:

eff31b22-3190-11ee-bbcf-dac502259ad0.png

f012de8a-3190-11ee-bbcf-dac502259ad0.png

f044c80a-3190-11ee-bbcf-dac502259ad0.png

然后配置PWR的wakeup引脚:

f05ee744-3190-11ee-bbcf-dac502259ad0.png

点击“GENERATE CODE“生成设备树,打开tfa设备树添加usercode,PMIC部分的配置建议直接从tfa源码中直接拷贝stm32mp135f-dk.dts的配置,然后根据硬件设计的BUCK与LDO输出修改regulator的配置

&i2c4{ pinctrl-names = "default"; pinctrl-0 = <&i2c4_pins_mx>; status = "okay";
/* USER CODE BEGIN i2c4 */ i2c-scl-rising-time-ns = <185>; i2c-scl-falling-time-ns = <20>; clock-frequency = <400000>;
pmic:stpmic@33{ compatible = "st,stpmic1"; reg = <0x33>; status = "okay"; regulators{ compatible = "st,stpmic1-regulators"; buck1-supply = <&vin>; … ldo6-supply = <&vin>; vref_ddr-supply = <&vin>; pwr_sw1-supply = <&bst_out>; pwr_sw2-supply = <&v3v3_ao>;
vddcpu:buck1{ regulator-name = "vddcpu"; regulator-min-microvolt = <1250000>; regulator-max-microvolt = <1250000>; regulator-always-on; regulator-over-current-protection; }; … v3v3_sw:pwr_sw2{ regulator-name = "v3v3_sw"; regulator-active-discharge = <1>; regulator-always-on; }; }; }; /* USER CODE END i2c4 */};

Regulator的输入vin与v3v3_ao也需要在设备树中定义,添加user code到USER Code BEGINroot节点下:

/ { /* USER CODE BEGIN root */
vin: vin { compatible = "regulator-fixed"; regulator-name = "vin"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-always-on; }; v3v3_ao: v3v3_ao { compatible = "regulator-fixed"; regulator-name = "v3v3_ao"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; }; /* USER CODE BEGIN root */

添加PWR节点配置:

&pwr_regulators{ status = "okay";/* USER CODE BEGIN pwr_regulators */ vdd-supply = <&vdd>; vdd_3v3_usbfs-supply = <&vdd_usb>; /* USER CODE END pwr_regulators */ };

添加CPU Supply节点配置:

编译并部署到板子,确认DDR错误是否被修复;

烧录后,log打印如下:DDR错误被修复

NOTICE: CPU: STM32MP135F Rev.?NOTICE: Model: STMicroelectronics custom STM32CubeMX boardERROR: nvmem node board_id not foundINFO: PMIC version = 0x21WARNING: VDD unknownINFO: Reset reason (0x35):INFO: Power-on Reset (rst_por)INFO: FCONF: Reading TB_FW firmware configuration file from: 0x2ffe0000INFO: FCONF: Reading firmware configuration information for: stm32mp_ioINFO: Using USBINFO: Instance 2INFO: Boot used partition fsbl1NOTICE: BL2: v2.6-stm32mp1-r2.0(debug):v2.6-stm32mp-r2-7-g866f2b026-dirty(866f2b02)NOTICE: BL2: Built : 1207, Jun 7 2023INFO: BL2: Doing platform setupINFO: RAM: DDR3-DDR3L 16bits 533000kHzINFO: Memory size = 0x20000000 (512 MB)INFO: DFU USB START...INFO: handle USB : Suspend intINFO: USB Suspend modeINFO: handle USB : Reset

II.分离式电源设计

Myir开发板采用的正是分离式电源,原理图如下:

f083f5f2-3190-11ee-bbcf-dac502259ad0.png


当板子上电后,VDD-Core, VDD-CPU, VDD-DDR等会陆续有电源输出,无需通过STM32CubeMX配置以及软件控制,这里只需要添加一些user code即可:

添加CPU Supply节点配置:

/* USER CODE BEGIN addons */&cpu0{ cpu-supply = <&vddcpu>;};/* USER CODE END addons */

还需要定义在CPU Supply节点中引入的regulator vdd_cpu:

/* USER CODE BEGIN root */ vdd_cpu: vdd_cpu{ compatible = "regulator-fixed"; regulator-name = "vdd_cpu"; regulator-min-microvolt = <1250000>; regulator-max-microvolt = <1250000>; regulator-always-on; };/* USER CODE END root */

4.1.4 RCC

RCC, Resetand clock control, RCC模块负责内部时钟(LSI, HSI和CSI)和外部时钟(LSE和HSE)的控制,这些内外部时钟源为硬件模块直接或间接(通过PLLs)的提供时钟信号,其中:

PLL1作为MPU的时钟源

PLL2为AXI-SS (包括APB4, APB5以及APB6),DCMIPP和DDR提供时钟

PLL3为MLAHB, APB1, APB2, APB3,AHB等提供时钟,还有外设的时钟

PLL4为各种外设提供时钟

这里介绍如何配置使能外部时钟LSE和LSE,首先看一下HSE的几种经典设计电路:

f099cf12-3190-11ee-bbcf-dac502259ad0.png


不同的硬件设计方式在软件上的配置区别如下:

Example1: STM32MP157C-EV1

f0c58198-3190-11ee-bbcf-dac502259ad0.png

f1202a80-3190-11ee-bbcf-dac502259ad0.png

f1466c18-3190-11ee-bbcf-dac502259ad0.png

f159f026-3190-11ee-bbcf-dac502259ad0.png

Example 2: STM32MP135F-DK

f17b7962-3190-11ee-bbcf-dac502259ad0.png

f196dcde-3190-11ee-bbcf-dac502259ad0.png

f1c5daca-3190-11ee-bbcf-dac502259ad0.png

f1eec3b8-3190-11ee-bbcf-dac502259ad0.png

RCC可以提供2个输出时钟(MCO1, MCO2),可以作为外部设备的时钟源。

f20fd292-3190-11ee-bbcf-dac502259ad0.png

通过以上两个例子的展示,看一下Myir的硬件设计:

f2363fcc-3190-11ee-bbcf-dac502259ad0.png

HSE采用的与STM32MP135F-DK相同的无源晶振设计,所以STM32CubeMX的配置如下:

f257a00e-3190-11ee-bbcf-dac502259ad0.png

f29e7fce-3190-11ee-bbcf-dac502259ad0.png


切换到 ”Clock Configutation” 界面,将PLL1,PLL2的时钟源切换到HSE,并确认DDR的时钟频率设置在533Mhz, CPU主频先配置在650Mhz:

f2e507f0-3190-11ee-bbcf-dac502259ad0.png

f3237d32-3190-11ee-bbcf-dac502259ad0.png

点击”Generate code”, 编译TF-A,并deploy到板子,串口log输出应与上一步相同。

如果在配置RCC后,没有打印出与上一步形同的log, 串口打印如下panic:

PANIC at PC : 0x2ffecb43Exception mode=0x00000016 at: 0x2ffecb43

请检查STM32CubeMX中HSE的配置,如果确认配置没有问题,请检查硬件连接。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ST
    ST
    +关注

    关注

    32

    文章

    1104

    浏览量

    128344
  • STM32
    +关注

    关注

    2251

    文章

    10728

    浏览量

    350517
  • 开发板
    +关注

    关注

    25

    文章

    4613

    浏览量

    95152
  • 米尔
    +关注

    关注

    0

    文章

    45

    浏览量

    7799
收藏 人收藏

    评论

    相关推荐

    MCU友好过渡MPU,米尔基于STM32MP135开发板裸机开发应用笔记

    和MPU之间的区别变得越来越模糊。STM32MP135是一款入门级的高性价比MPU,适用于MCU性能达不到要求或者需要跑Linux的场景。米尔STM32MP135开发板提供基于
    发表于 03-29 18:35

    开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

    实时高性能需求尤其突出。面对以上挑战,合作伙伴翌控科技基于米尔STM32MP135开发板发布开放式高实时高性能PLC控制器解决方案,将高精准数据采集、预处理、存储、通信与高实时控制融为一体,为控制系统
    发表于 03-07 20:06

    米尔-STM32MP135开发板-入门级MPU试用】MYD-YF135源码编译

    x-256m-optee.zip和FlashLayout_spinand-256-256_myb-stm32mp135x-256m-optee.tsv等文件就是我们需要的镜像文件。 到此,系统构建的基本过程就完成了,接下来就可将镜像烧写到开发板了。笔者在前文已经讲述过系统
    发表于 09-30 15:24

    正点原子STM32MP135开发平台介绍

    正点原子简介、正点原子STM32产品线、STM32MP135MP135B核心
    发表于 09-05 06:08

    米尔-STM32MP135开发板-入门级MPU试用】初识功能强大的米尔-STM32MP135开发板培训课程

    核心标注图 米尔MYD-YA157C-V3开发板标注图 [# ST官方基于米尔
    发表于 09-04 22:16

    米尔-STM32MP135开发板-入门级MPU试用】让米尔-STM32MP135开发板轻松跑Linux

    ,此前,米尔发布的基于STM32MP1系列的核心开发板受到广大客户的认可和喜爱,有超过500家的客户选择,应用行业丰富。 STM32MP1
    发表于 09-04 21:46

    米尔-STM32MP135开发板-入门级MPU试用】说说米尔-STM32MP135开发板板卡做工及配件

    最近,收到了一套米尔基于STM32MP135核心开发板,首次接触STM32MPx处理器,体验了一下
    发表于 08-17 00:11

    米尔-STM32MP135开发板-入门级MPU试用】米尔-STM32MP135开发板开发环境搭建

    -STM32MP135开发板开发环境搭建: 1、开发环境 • Linux开发主机:Debian, Ubuntu, RHEL等。 •
    发表于 08-17 00:07

    米尔-STM32MP135开发板-入门级MPU试用】STM32MP135开发板评测之初体验

    最近,收到了一套米尔基于STM32MP135核心开发板,首次接触STM32MPx处理器,对米尔
    发表于 08-16 23:59

    米尔-STM32MP135开发板-入门级MPU试用】MYD-YF135系统烧写

    Nand Flash和SD卡。 MYC-YF135是基于 ST 公司的 STM32MP135系列微处理器,因此这里可以使用STM32CubeProgrammer烧写系统。 1 MYC-
    发表于 08-07 21:38

    米尔-STM32MP135开发板-入门级MPU试用】MYD-YF135开发板测评(一)

    MYD-YF135开发板米尔电子基于 STM32MP135 处理器推出的嵌入式开发板,套件由核心
    发表于 08-03 22:39

    STM32也能轻松跑Linux了 !STM32MP135开发板评测

    ),这让STM32MP系列处理器又上了一个新的台阶。最近,收到了一套米尔基于STM32MP135核心板及开发板,首次接触STM32MPx处理
    的头像 发表于 07-31 22:09 1893次阅读
    <b class='flag-5'>STM32</b>也能轻松跑Linux了 !<b class='flag-5'>STM32MP135</b><b class='flag-5'>开发板</b>评测

    ST官方基于米尔STM32MP135开发板培训课程(一)

    本文将以Myirtech的MYD-YF13X以及STM32MP135F-DK为例,讲解如何使用STM32CubeMX结合Developerpackage实现最小系统启动。1.开发准备1.1Developerpackage准备a.
    的头像 发表于 07-31 22:08 468次阅读
    <b class='flag-5'>ST</b><b class='flag-5'>官方</b>基于<b class='flag-5'>米尔</b><b class='flag-5'>STM32MP135</b><b class='flag-5'>开发板</b><b class='flag-5'>培训</b><b class='flag-5'>课程</b>(一)

    正点原子STM32MP135开发平台介绍

    电子发烧友网站提供《正点原子STM32MP135开发平台介绍.pdf》资料免费下载
    发表于 07-29 11:34 4次下载
    正点原子<b class='flag-5'>STM32MP135</b><b class='flag-5'>开发</b>平台介绍

    ST官方基于米尔STM32MP135开发板培训课程(一)

    本文将以Myirtech的MYD-YF13X以及STM32MP135F-DK为例,讲解如何使用STM32CubeMX结合Developer package实现最小系统启动。     1.开发准备
    的头像 发表于 07-27 19:34 785次阅读
    <b class='flag-5'>ST</b><b class='flag-5'>官方</b>基于<b class='flag-5'>米尔</b><b class='flag-5'>STM32MP135</b><b class='flag-5'>开发板</b><b class='flag-5'>培训</b><b class='flag-5'>课程</b>(一)