树莓派5使用PCIe接口连接NVME M.2固态硬盘SSD

关于树莓派5的PCIe接口
树莓派5在电路板侧边有一个 FPC 连接器。该连接器提供 PCIe Gen 2.0 ×1 接口,本文介绍并实际演示操作如何使用此PCIe接口连接M.2固态硬盘(SSD),可以将固态硬盘作为启动盘或附加存储。

通过相应设置,该接口也可以工作在PCIe Gen 3.0 ×1模式下,树莓派5未经过 Gen 3.0 速度认证,以Gen3速率连接到 PCIe 设备可能不稳定,官方对此速率下的稳定性不做保证。


用于 PCIe 的 Raspberry Pi 连接器
需要准备的材料
树莓派5
带有raspberryPi OS镜像tf卡(16GB以上)
PCIe扩展套件(除PCB外还包含FPC、螺丝、铜柱)
对应规格的M.2固态硬盘(例如你的PCIe套件只支持2280硬盘的话,就用2280尺寸固态) 需要注意的是西数SN系列硬盘目前无法完全兼容
type-c电源(推荐用官方电源)
如使用SSH或VNC则需要电脑、局域网络连接,否则需使用树莓派HDMI以及USB
M.2固态硬盘盒(非必需,用于写入镜像,可用扩展套件解决)
截至2024年1月23日,树莓派官方的扩展( NVMe M.2 HAT) 仍处于原型阶段,尚未发布。

树莓派官方发布了PCIe连接器的文档以及HAT+规范,地址如下适用于 PCIe 标准的 Raspberry Pi 连接器文档

Raspberry Pi HAT+规范

Pineberry Pi以及一些国内配件商也发布了相应的PCIe扩展板

​​

实际演示操作
固态硬盘使用方式分为

1、用作启动盘

此工作方式需要修改树莓派板载的EEPROM

2、仅作为外接存储盘

仅作为外接存储盘只需要修改TF卡的配置文件

这里我们使用的是Mcuzone的扩展板MPS2280以及三星PM991A 2230固态硬盘

野芯科技Mcuzon的MPS2280套件使用2230硬盘,需要额外购买固定柱并焊接/粘贴至相应尺寸,例如图中已经在2230位置粘接好了额外的固定柱,2280硬盘则不需要

官方文档相关部分见如下网址:

用于 PCIe 的 Raspberry Pi 连接器

用作启动盘方式
用作启动盘方式的总体思路为

1、先使用TF卡镜像启动(可选是否修改TF卡的config.txt)

2、将系统写入固态硬盘

3、修改固态硬盘boot分区中的config.txt,使能PCIe接口

4、修改EEPROM,使能PCIe启动模式

5、连接PCIe扩展板以及固态硬盘,上电即从固态硬盘启动

通过TF卡启动
需要有一张烧写好树莓派官方系统镜像的TF卡,且镜像至少是2023年10月或12月之后的版本,本次演示使用的是2023年10月的Raspberry Pi OS(Bookworm)64位桌面版本

如果你手上没有M.2硬盘盒,则需要修改TF卡boot分区中的config.txt,将PCIe接口使能,从而通过树莓派imager软件使用PCIe扩展板将系统镜像写入固态硬盘

如果有可用的M.2硬盘盒,则可以忽略 修改TF卡的config.txt(可选) 这一部分

修改TF卡的config.txt(可选)
这一部分的目的是为了能使用树莓派PCIe扩展版烧写镜像至固态硬盘

将TF卡插入Windows电脑中,TF卡中的boot分区将会被识别,进入该分区

找到config.txt并打开,在文件的末尾加入如下代码:

dtparam=pciex1
如果你愿意使用PCIe 3.0则改为输入:

dtparam=pciex1
dtparam=pciex1_gen=3
修改完毕后保存内容,将TF卡插入树莓派5并启动

将系统写入固态硬盘
此时可以开始组装PCIe扩展套件,如果你没有硬盘盒能够将固态硬盘连接电脑,那么则需要一并将固态硬盘安装到PCIe扩展套件上,并且必须执行修改TF卡的config.txt(可选)部分中的操作。使用硬盘盒的话就将固态硬盘连接到电脑,烧写后再将固态硬盘安装到PCIe扩展板上。

通过FPC将扩展版的接口与树莓派5的PCIe接口相连(注意FPC接口需要区分正反)

此时需确保彻底断电,即拔掉电源,不要让电源与树莓派连接,否则PCIe接口仍处于上电状态

使用PCIe扩展板的写入方式
连接好扩展板后开机,打开Imager,如果你的系统中没有官方Imager,用如下命令安装

sudo apt install rpi-imager
打开Imager,选择好要写入的系统(除官方系统外也可以选择Ubuntu或者其他系统)并选择要写入到的位置,即需要选择固态硬盘,开始后可能提示要输入一个密码,这个密码就是你登录树莓派的密码,输入即开始烧录,烧录好后不要卸载硬盘,如果自动帮你弹出了就重启一下

使用硬盘盒的写入方式
将固态硬盘连接到电脑,同样使用官方Imager烧写镜像。一定记得选好盘符,不要选到其他存储

修改固态硬盘的config.txt
系统烧录好后在文件管理器中找到固态硬盘的boot分区,可能要输入一下密码,与烧录时相同

这步操作在Window电脑上进行也是一样,在Windows中会只能识别访问到FAT32格式的boot分区,如果你的Windows系统的文件资源管理器不能识别到boot分区,可以尝试重新插拔硬盘盒或者尝试连接一下Linux电脑(用树莓派尝试启动一下也可以)

找到config.txt并打开,在文件的末尾加入如下代码:

dtparam=pciex1
如果你愿意使用PCIe 3.0则输入:

dtparam=pciex1
dtparam=pciex1_gen=3
修改完毕后保存内容​

修改EEPROM
在终端中输入

sudo rpi-eeprom-config --edit
即打开EEPROM的配置文件,修改以下两项:

BOOT_ORDER=0xf416
PCIE_PROBE=1
其中 PCIE_PROBE=1 的意思是使用的是非官方HAT扩展板


修改后的内容

ctrl+x 后按Y保存回车退出 出现此输出则正常
此时重启一次,使修改生效

sudo reboot
为确保写入生效可以再打开EEPROM配置文件检查,即重复 sudo rpi-eeprom-config --edit

确保无误后将树莓派关机

sudo shutdown -h now
将固态硬盘安装到PCIe扩展板上

取下TF卡,只安装固态硬盘,给树莓派5上电,开机

成功启动!

可以看到已经成功通过固态硬盘启动,hdparm测试读取速度可以达到800MB/s,dd测试中写入速度可以达到480MB/s

树莓派5已经能支持高速TF卡,开机时使用固态硬盘与使用高速TF卡耗时其实也几乎没有区别

用作存储盘方式
用作存储盘方式的总体思路为

1、修改tf卡boot分区中的config.txt,使能PCIe接口

2、连接已经分区好的固态硬盘

3、上电启动后即可识别到固态硬盘

修改TF卡的config.txt
将TF卡插入Windows电脑中,TF卡中的boot分区将会被识别到,进入该分区

找到config.txt并打开,在文件的末尾加入如下代码:

dtparam=pciex1
如果你愿意使用PCIe 3.0则改为输入:

dtparam=pciex1
dtparam=pciex1_gen=3
修改完毕后保存修改内容

组装PCIe扩展套件

组装好后上电开机即可,已经可以成功识别并使用M.2固态硬盘了(需要输入下密码)

附录以及注意事项
硬盘兼容性问题
主流固态硬盘通常可以使用,西数SN系列硬盘目前普遍只能作为存储盘,实测SN550和SN570作为系统盘未能成功启动。

在Pineberry Pi Documentaton的兼容列表中给出了部分硬盘的兼容情况及运行速度:兼容性列表

其中也提到 WD SN530 SN740 SN350 SN770 无法启动

关于SN850X运行于CM4的GitHub Issue页面:WD_BLACK SN850X (Gen 4) NVMe not detected (via PCIe, CM4)

关于硬盘的选择
三星PM991a实测发热量很大,很容易降速,使用2280规格硬盘可能会好一些

树莓派5并不支持PCIe 4.0 ,即使是使用PCIe 3.0硬盘,读取/写入速度的瓶颈也在于树莓派本身,故使用价格合适的PCIe 3.0硬盘即可

西数SN系列硬盘目前无法用作启动盘

config.txt文件
在PCIe扩展板的供应商给出的教程中,有的部分可能会被省略

Mcuzone的示例中缺少将系统写入SSD后还需要修改SSD的boot分区中的config.txt这一步

无论何种PCIe的使用方式,在树莓派实际使用的启动存储介质的boot分区中,必须确保其boot分区中的config.txt文件中使能了PCIe接口。

树莓派官方系统是默认关闭PCIe的,如果忽略了这一步修改,那么启动时PCIe接口的配置即是默认配置,也就是关闭状态。

修改的部分也有两种写法,其实都可以用

#第一种
dtparam=nvme
#第二种
dtparam=pciex1
如果已经配置了PCIe,仍要从TF卡启动
如果TF卡与固态硬盘同时存在,在EEPROM中已经修改了 BOOT_ORDER=0xf416 的情况下,系统会优先从固态硬盘启动,其实就类似于电脑主板bios的启动顺序选择。

此时只需要在关机状态下将固态硬盘取下,插入TF卡,即使PCIe扩展板仍然连接,系统也将自动切换从TF卡启动。如果开机之前已经插上固态硬盘,那么还是会从固态硬盘启动。

需注意:目前的系统中,PCIe接口似乎并不支持热插拔,在TF卡启动后,再插入固态硬盘并不会被识别

关于固态硬盘分区问题
烧写好镜像后,硬盘会被分为boot和root分区,实测使用Windows的Imager搭配硬盘盒烧写镜像时有的时候会只给root分区分配4GB左右的空间,导致多余空间被浪费,这时候可以在Windows中用DiskGenius扩容一下root分区或者尝试重新烧写(Windows的磁盘管理中不能修改EXT4格式的root分区,扩容需使用分区软件)

一些官方论坛中关于PCIe连接SSD的讨论:
Pi 5 NVMe Boot Issue - Raspberry Pi Forums

Raspberry Pi 5 PCIe issues using geekworm X1001 - Raspberry Pi Forums

Expected SSD nvme boot speed - Raspberry Pi Forums
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/timelockerCSDN/article/details/135793432

About the Author

Avatar photo

今生在线

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据