STM32MP157A-DK1测评 (1)官方OpenSTLinux烧写
<div class='showpostmsg'><p> STM32MP157A-DK1 这个板子从主要特征上看,就和风靡已久的各种“派”相似了,而和 STM32 MCU 的discovery比变化较大。至于玩法,因为目标平台是 ARM cortex-A 系列CPU的Linux系统,在应用层面上和其它 Linux 板子(比如各种“派”)风格就一致。</p><p> 本来这个套件已经带了烧写好官方提供的 OpenSTLinux 的MicroSD卡,但不幸我收到的这套里面MicroSD卡已经壮烈牺牲了。于是我不能立即体验其demo. 得自己找个卡做个系统上去才能玩了。有点障碍的小问题是板子电源是 USB type-C 口提供电源(没有常规DC插座),而随板子给的一条USB线是双头 Type-C 口,这样我还没有电源可以直接插上去。ST-Link部分仍然是 USB micro 接口,但MPU并不从ST-Link这里获取电源,板子也没有电源跳线选择。按惯例某些插针上会连到5V电源,然而作为电源输入也不合适,我得找个 Type-C 的插头焊个电源线来用。</p>
<p> 首先明确一点,<span style="color:#c0392b;"><strong>STM32MP157A 这颗MPU是不带Flash的</strong></span>——这不同于STM32 MCU. 纵观板子以及查阅线路图又可以确定板子上没有NOR Flash、NAND Flash、eMMC之类存储芯片。这样也不需要对板子进行烧写,不存在烧错了“变砖”的风险,而且MicroSD卡接到其它系统上太灵活了。<br />
根据 wiki.st.com 上 Starter package 部分的介绍(<a href="https://wiki.st.com/stm32mpu/wiki/STM32MP15_Discovery_kits_-_Starter_Package" target="_blank">https://wiki.st.com/stm32mpu/wiki/STM32MP15_Discovery_kits_-_Starter_Package</a>),需要用 STCubeProgrammer 来制作SD卡,这样就仿佛是对板子进行“烧写”编程(对于只有这一块开发板的用户来说这也是省事)。又要注意了,和以往MCU的烧写不同,这里的烧写并不是通过 ST-Link 进行,而是用STM32MP1的USB DFU模式,也就是从板子上另外一个 USB type-C 的口连接PC操作。但是我仅有的一条 USB type-C 转 type-A 数据线还不在手边,又卡壳了。</p>
<p> 不过还有办法,STCubeProgrammer 还可以使用 UART 操作,就是速度慢而已,这个 UART 就是从 ST-Link 的 VCP 接出来的。</p>
<p> 于是我不得已用这个慢速连接进行烧写操作。</p>
<p></p>
<p> 事先需要将板子背面的 BOOT 开关都拨到 OFF 位置,也就是 BOOT0=0, BOOT2=0 (BOOT1固定为0),选择UART / USB启动。</p>
<p> 尝试之后我认为这样个操作是可以的:<br />
也就是用 -c 参数指定端口(USB或UART),用 -w 参数指定一个 layout 文件,提供给 STM32_Programmer_CLI 程序。程序会根据 layout 文件找到实际要烧写的数据文件进行操作。</p>
<p> 比如这个 <strong>FlashLayout_sdcard_stm32mp157a-dk1-trusted.tsv</strong> 文件的内容:</p>
<div aria-label="代码段 小部件" contenteditable="false" role="region" tabindex="-1">
<pre data-widget="codesnippet">
<code class="hljs">#Opt Id Name Type IP Offset Binary
- 0x01 fsbl1-boot Binary none 0x0 tf-a-stm32mp157a-dk1-trusted.stm32
- 0x03 ssbl-boot Binary none 0x0 u-boot-stm32mp157a-dk1-trusted.stm32
P 0x04 fsbl1 Binary mmc0 0x00004400 tf-a-stm32mp157a-dk1-trusted.stm32
P 0x05 fsbl2 Binary mmc0 0x00044400 tf-a-stm32mp157a-dk1-trusted.stm32
P 0x06 ssbl Binary mmc0 0x00084400 u-boot-stm32mp157a-dk1-trusted.stm32
P 0x21 bootfs System mmc0 0x00284400 st-image-bootfs-openstlinux-weston-stm32mp1.ext4
P 0x22 vendorfs FileSystem mmc0 0x04284400 st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
P 0x23 rootfs FileSystem mmc0 0x05284400 st-image-weston-openstlinux-weston-stm32mp1.ext4
P 0x24 userfs FileSystem mmc0 0x33C84400 st-image-userfs-openstlinux-weston-stm32mp1.ext4
</code></pre>
<img src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" /><span style="background-color: rgba(220, 220, 220, 0.498039); background-image: url(https://bbs.eeworld.com.cn/static/editor/plugins/widget/images/handle.png); top: -15px; left: 0px; display: block; background-position: initial initial; background-repeat: initial initial;"><img height="15" role="presentation" src="data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==" title="点击并拖拽以移动" width="15" /></span></div>
<p> 也就是说,SD卡并不是整个作为一个Linux文件系统来用的,不能直接格式化了把文件复制进去。这样是要麻烦点,启动linux必需的 u-boot 也是存放在 SD 卡里面。根据资料,SD卡的空间分配是这样的:</p>
<p> 正因如此,要利用CubeProgrammer来完成存储空间的索引,按地址写入文件。</p>
<p> 但是,115200 baud 的UART速度实在太慢,写到后面几十MB的ext4文件系统内容时,效率不能忍受了。遂放弃……</p>
<p> </p>
<p> 我放弃通过 UART 用 CubeProgrammer 烧写,并非要转用 USB DFU, 而是因为发现FLASH文件压缩包中有 <strong>scripts/create_sdcard_from_flashlayout.sh</strong> 这个 bash 脚本文件,它应当是可以直接写SD卡的。于是,使用 Linux 机器执行这个脚本(注意需要 sgdisk 程序,我本来没有,结果第一次生成的结果不能用)。</p>
<p># <span style="color:#2980b9;"><strong>scripts/create_sdcard_from_flashlayout.sh flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157a-dk1-basic.tsv</strong></span></p>
<p>这个脚本程序将创建一个镜像文件,完成后用 dd 命令写入 SD 卡应该就可以了。</p>
<p><em>Create Raw empty image: flashlayout_st-image-weston/../flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157a-dk1-basic.raw of 1536MB</em><br />
具体的分区划分:</p>
<pre>
<code>NumberStart (sector) End (sector)Size CodeName
1 34 545 256.0 KiB 8301fsbl1
2 546 1057 256.0 KiB 8301fsbl2
3 1058 5153 2.0 MiB 8301ssbl
4 5154 136225 64.0 MiB 8300bootfs
5 136226 168993 16.0 MiB 8300vendorfs
6 168994 1705857 750.4 MiB 8300rootfs
7 1705858 3145694 703.0 MiB 8300userfs
</code></pre>
<p>对应的文件:</p>
<pre>
<code>part 1: fsbl1, image: u-boot-spl.stm32-stm32mp157a-dk1-basic
part 2: fsbl2, image: u-boot-spl.stm32-stm32mp157a-dk1-basic
part 3: ssbl, image: u-boot-stm32mp157a-dk1-basic.img
part 4: bootfs, image: st-image-bootfs-openstlinux-weston-stm32mp1.ext4
part 5: vendorfs, image: st-image-vendorfs-openstlinux-weston-stm32mp1.ext4
part 6: rootfs, image: st-image-weston-openstlinux-weston-stm32mp1.ext4
part 7: userfs, image: st-image-userfs-openstlinux-weston-stm32mp1.ext4
</code></pre>
<p><br />
这样用脚本文件处理就摆脱了 CubeProgrammer 的步骤,直接制作 SD 卡,效率很高。SD卡用2GB以上就满足要求了。准备好以后将板子背面 BOOT 开关都拨到 ON 位置,插好 MicroSD 卡然后通电。一会儿蓝色LED闪烁,就说明系统启动成功了。从 ST-Link 的 VCP 可以看到启动时的很多信息。</p>
<p><br />
<b><font color="#5E7384">此内容由EEWORLD论坛网友<font size="3">cruelfox</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>楼主写的太好了,给楼主加个鸡腿!</p>
<p>板子很漂亮,楼主的帖子也排版很漂亮</p>
<p>兄弟好象m4的核心里是有flash的,我使用st-link看见了。在keil里操作的。因为没有仔细的了解过,就没敢往里写程序。</p>
<p></p>
bigbat 发表于 2020-3-30 15:28
兄弟好象m4的核心里是有flash的,我使用st-link看见了。在keil里操作的。因为没有仔细的了解过,就没敢往里 ...
<p>没有。datasheet和reference manual都没有提到片内FLASH. </p>
<p>有片上SRAM专给跑M4的程序。</p>
<p>找到的资料说:开发板有2种启动模式:Production 启动模式 和 Engineering模式,默认为Production 模式,</p>
<p>M4的固件依靠A7进行加载,系统资源由OpenSTLinux直接管理(时钟,调节器等),预构建的固件在OpenSTLinux映像或文件系统中提供和下载,通过Linux Remote Proc组件在协处理器M4上启动了预构建的固件,Cortex-A固件(Linux OS)负责加载Cortex-M固件。<br />
Engineering 专门用于直接在协处理器M4上进行固件测试,所有资源都直接在工程源代码中进行管理(时钟,调节器等)</p>
<p>而且好象这个由BOOT0,BOOT1,BOOT2选择的启动过程就是ROM程序来控制的。目前还不敢确定,这种烧写会不会破坏开发板的ROM。如果变砖就惨了。</p>
<p>够坎坷的,你的办还还挺多。</p>
<p>FLASH文件压缩包中有 <strong>scripts/create_sdcard_from_flashlayout.sh</strong> </p>
<p>请问你这个是哪下载的,我得sd卡邮寄到也废了不知道怎么弄了?</p>
人生如梦呀 发表于 2020-4-20 22:42
FLASH文件压缩包中有 scripts/create_sdcard_from_flashlayout.sh
请问你这个是哪下载的,我 ...
<p>STMCU中文网(stmcu.com.cn)资料下载,找stm32mp的软件和固件。</p>
<p>比从ST国外网下快。</p>
<p>你好我用以下命令操作了不知道哪里不对?希望帮指点下</p>
<p>./create_sdcard_from_flashlayout.sh ../flashlayout_st-image-weston/F<br />
lashLayout_sdcard_stm32mp157a-dk1-trusted.tsv </p>
<p> </p>
<p>sudo dd if=../flashlayout_st-image-weston/../flashlayout_st-image-we<br />
ston_FlashLayout_sdcard_stm32mp157a-dk1-trusted.raw of=/dev/mmcblk0 bs=8M conv=fdatasync status=progress<br />
</p>
<p>你好我的stm32mp1 sd 还是没有好用 ,生成。raw 成功</p>
<p>1.umount /dev/sdb1</p>
<p>2.sudo mkfs.ntfs -f /dev/sdb1</p>
<p>sudo dd if=./flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157a-dk1-<br />
trusted.raw of=/dev/sdb1 conv=fdatasync status=progress</p>
<p>我这样有什么问题吗,希望有时间帮指点下</p>
人生如梦呀 发表于 2020-4-24 23:13
你好我的stm32mp1 sd 还是没有好用 ,生成。raw 成功
1.umount /dev/sdb1
2.sudo mkfs.ntfs -f /dev/s ...
<p>不需要 mkfs.ntfs 这一步。</p>
<p>dd of=/dev/sdb 不要用 /dev/sdb1 否则很可能是把 raw 文件的内容写到 sd 卡的第一个分区里面了。</p>
cruelfox 发表于 2020-4-24 23:59
不需要 mkfs.ntfs 这一步。
dd of=/dev/sdb 不要用 /dev/sdb1 否则很可能是把 raw 文件的内容 ...
<p>多谢,我的不好用就是这个问题,多谢楼主</p>
<p>写的很详细啊 。</p>
Response received from device: NACK GETPHASE command not acknowledged!Reemission of GetPhase command GETPHASE command not acknowledged!Reemission of GetPhase command GETPHASE command not acknowledged! Error: GetPhase command not acknowledged after 3 retries! <p>楼主,我烧写sd卡启动时,出现了Exception mode=0x00000016 at: 0x2ffda000,请问时什么原因?</p>
<p> </p>
<p> </p>
<p> </p>
页:
[1]