cruelfox 发表于 2020-3-30 12:01

STM32MP157A-DK1测评 (1)官方OpenSTLinux烧写

<div class='showpostmsg'><p>  STM32MP157A-DK1 这个板子从主要特征上看,就和风靡已久的各种&ldquo;派&rdquo;相似了,而和 STM32 MCU 的discovery比变化较大。至于玩法,因为目标平台是&nbsp;ARM cortex-A&nbsp;系列CPU的Linux系统,在应用层面上和其它 Linux 板子(比如各种&ldquo;派&rdquo;)风格就一致。</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>&mdash;&mdash;这不同于STM32 MCU.&nbsp;纵观板子以及查阅线路图又可以确定板子上没有NOR Flash、NAND Flash、eMMC之类存储芯片。这样也不需要对板子进行烧写,不存在烧错了&ldquo;变砖&rdquo;的风险,而且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卡,这样就仿佛是对板子进行&ldquo;烧写&rdquo;编程(对于只有这一块开发板的用户来说这也是省事)。又要注意了,和以往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>  比如这个&nbsp;<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文件系统内容时,效率不能忍受了。遂放弃&hellip;&hellip;</p>

<p>&nbsp;</p>

<p>  我放弃通过 UART 用&nbsp;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>

兰博 发表于 2020-3-30 14:03

<p>楼主写的太好了,给楼主加个鸡腿!</p>

<p>板子很漂亮,楼主的帖子也排版很漂亮</p>

bigbat 发表于 2020-3-30 15:28

<p>兄弟好象m4的核心里是有flash的,我使用st-link看见了。在keil里操作的。因为没有仔细的了解过,就没敢往里写程序。</p>

<p></p>

cruelfox 发表于 2020-3-30 16:03

bigbat 发表于 2020-3-30 15:28
兄弟好象m4的核心里是有flash的,我使用st-link看见了。在keil里操作的。因为没有仔细的了解过,就没敢往里 ...

<p>没有。datasheet和reference manual都没有提到片内FLASH.&nbsp;</p>

<p>有片上SRAM专给跑M4的程序。</p>

bigbat 发表于 2020-3-31 12:30

<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>

littleshrimp 发表于 2020-3-31 15:01

<p>够坎坷的,你的办还还挺多。</p>

人生如梦呀 发表于 2020-4-20 22:42

<p>FLASH文件压缩包中有&nbsp;<strong>scripts/create_sdcard_from_flashlayout.sh</strong>&nbsp;</p>

<p>请问你这个是哪下载的,我得sd卡邮寄到也废了不知道怎么弄了?</p>

cruelfox 发表于 2020-4-21 09:38

人生如梦呀 发表于 2020-4-20 22:42
FLASH文件压缩包中有&nbsp;scripts/create_sdcard_from_flashlayout.sh&nbsp;

请问你这个是哪下载的,我 ...

<p>STMCU中文网(stmcu.com.cn)资料下载,找stm32mp的软件和固件。</p>

<p>比从ST国外网下快。</p>

人生如梦呀 发表于 2020-4-24 22:11

<p>你好我用以下命令操作了不知道哪里不对?希望帮指点下</p>

<p>./create_sdcard_from_flashlayout.sh ../flashlayout_st-image-weston/F<br />
lashLayout_sdcard_stm32mp157a-dk1-trusted.tsv&nbsp;</p>

<p>&nbsp;</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 />
&nbsp;</p>

人生如梦呀 发表于 2020-4-24 23:13

<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>

cruelfox 发表于 2020-4-24 23:59

人生如梦呀 发表于 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 &nbsp; 不要用 /dev/sdb1 否则很可能是把 raw 文件的内容写到 sd 卡的第一个分区里面了。</p>

人生如梦呀 发表于 2020-4-27 14:44

cruelfox 发表于 2020-4-24 23:59
不需要 mkfs.ntfs 这一步。

dd of=/dev/sdb &nbsp; 不要用 /dev/sdb1 否则很可能是把 raw 文件的内容 ...

<p>多谢,我的不好用就是这个问题,多谢楼主</p>

我不是传奇的叔叔 发表于 2020-6-30 22:33

<p>写的很详细啊 。</p>

gckzle 发表于 2020-7-30 16:44

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!

gck 发表于 2020-8-1 11:44

<p>楼主,我烧写sd卡启动时,出现了Exception mode=0x00000016 at: 0x2ffda000,请问时什么原因?</p>

<p>&nbsp;</p>

<p>&nbsp;</p>

<p>&nbsp;</p>
页: [1]
查看完整版本: STM32MP157A-DK1测评 (1)官方OpenSTLinux烧写