【正点原子Linux连载】 第四十六章 M.2硬盘驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南

本文主要是介绍【正点原子Linux连载】 第四十六章 M.2硬盘驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1)实验平台:正点原子ATK-DLRK3568开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=731866264428
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban

第四十六章 M.2硬盘驱动实验

M.2 硬盘,也被称为 M.2 SSD(Solid-State Drive),是一种高性能的存储设备,它采用 M.2 接口标准连接到计算机的主板上。M.2 硬盘具有许多优点,包括高速读写性能、小型尺寸、低功耗和可靠性。现在的计算机普通都有M.2接口,一般使用的协议都是PCIe。有的支持PCIe 2.0、PCIe 3.0甚至PCIe 4.0。PCIe 3.0 相对于 PCIe 2.0 提供了更高的带宽和性能,适用于需要高速数据传输的应用,如图形卡和高性能存储。ATK-DLRK3568底板有一路M.2接口使用的是PCIe 3.0总线,支持PCIe 3.0,本章我们来使用PCIe3.0驱动M.2硬盘。

46.1 M.2接口简介
M.2 接口是一种物理接口标准,它可以支持多种不同的通信协议,包括 PCIe(Peripheral Component Interconnect Express)、SATA(Serial Advanced Technology Attachment)、USB(Universal Serial Bus)等。因此,M.2 接口的速度和性能取决于所使用的通信协议和硬件实现。M.2 接口可以支持 PCIe 3.0,这是一种高速的数据传输协议,通常用于连接图形卡、固态硬盘(SSD)以及其他需要高带宽的设备。
M.2 插槽有不同的物理尺寸,包括 2242、2260、2280 和 22110 等。这些数字表示了插槽的长度和宽度。不同尺寸的插槽可容纳不同尺寸的 M.2 模块,以适应各种设备。正点原子的ATK-DLRK3

568开发板接口采用的是2280规格,详细请参考07、硬件资料05、板载连接器规格参考15、M.2座子下的文档说明。
ATK-DLRK3568底板M.2接口如下图图46.1.1,支持PCIe3.0。注意,5G模块接口也是用的M.2接口使用的是USB协议,两个座子的规格一样。
在这里插入图片描述

图46.1.1 M.2座子
46.2 RK3568 PCIE3.0简介
RK3568芯片拥有一个PCIe3.0 x2 Lane Dual Mode控制器,一个PCIe3.0 x1 Lane RC Mode控制器,一个PCIe3.0 x2 Lane PHY。PCIe3.0 x2 Lane Dual Mode控制器和PCIe3.0 x1 Lane RC Mode控制器都连接到PCIe3.0 x2 Lane PHY。连接示意图如下图46.2.1。
在这里插入图片描述

图46.2.1 PCIe3.0控制器/PCIe3.0 PHY框图
由上可知,两个控制器连接同一个PHY,这里我们先了解一下,因为后面设备树会用这部分知识。
46.3 硬件原理图
原理图如下图46.3.1,与SATA硬盘驱动实验章节一样,PCIE也属于专用IO,只需要启用对应的控制器,IO会复用成相应模式。下图我们只需要配置PCIE30X2全局复位IO即可。可以看到复位IO是GPIO2_PD6。
在这里插入图片描述

图46.3.1底板M.2硬盘接口原理图
46.4实验程序编写
46.4.1 修改设备树
前面说过PCIe所用的引脚属于专用引脚,只需要启用对应的控制器,对应的引脚将被设置成对应的模式。如PCIE30X2_WAKEn_M1(唤醒输入)引脚,参考08、RK官方文档01、LinuxRK356XDatasheet Rockchip_RK3568_Datasheet_V1.1-20210305.pdf可知这个引脚可以复用为LCDC_D5/VOP_BT656_D5_M0/SPI2_CS0_M1/PCIE30X2_WAKEn_M1/I2S1_SDI2_M2/GPIO2_D5_d模式。在设备树里我们启用pcie3x2及pcie30phy控制器节点,查看rk3568-atk-evb1-ddr4-v10.dtsi,可以看到以下内容:
示例代码46.4.1 启用pcie30py控制器和pcie3x2节点
738 &pcie30phy {

739         status = "okay";740 };741 742 &pcie3x2 {743         //pinctrl-names = "default";744         //pinctrl-0 = <&pcie30x2m1_pins>;745         reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_HIGH>;746         vpcie3v3-supply = <&vcc3v3_pcie>;747         status = "okay";748 };
746~744,看到pinmux被注释,我们不用配置,启用对应的控制器即可。

第746行,reset-gpios的管脚为GPIO2_D6。
再打开rk3568.dtsi查看如下内容。
示例代码46.4.2 两控制器连接到一个PHY
1 pcie3x1: pcie@fe270000 {
2 compatible = “rockchip,rk3568-pcie”, “snps,dw-pcie”;
3 #address-cells = <3>;
4 #size-cells = <2>;
5 bus-range = <0x10 0x1f>;

29 msi-map = <0x1000 &its 0x1000 0x1000>;
30 num-lanes = <1>;
31 phys = <&pcie30phy>;
32 phy-names = “pcie-phy”;
33 power-domains = <&power RK3568_PD_PIPE>;

53 };
54
55 pcie3x2: pcie@fe280000 {
56 compatible = “rockchip,rk3568-pcie”, “snps,dw-pcie”;
57 #address-cells = <3>;
58 #size-cells = <2>;
59 bus-range = <0x20 0x2f>;

83 msi-map = <0x2000 &its 0x2000 0x1000>;
84 num-lanes = <2>;
85 phys = <&pcie30phy>;
86 phy-names = “pcie-phy”;

94 reg-names = “pcie-dbi”, “pcie-apb”;
95 resets = <&cru SRST_PCIE30X2_POWERUP>;
96 reset-names = “pipe”;
97 /* rockchip,bifurcation; lane0 when using 1+1 /
98 status = “disabled”;
99

107 };
第31和85行可知pcie3x1和pcie3x2连接到同一个pcie30phy,正点原子ATK-DLRK3568M.2接口使用的是2通道的PCIE接口,也就是pcie3x2。
46.4.2 运行测试
ATK-DLRK3568 linux默认就支持M.2接口硬盘。无需我们重新修改设备树。直接在出厂的Linux buildroot系统上测试M.2硬盘是否支持。
测试方法与45.3.2一样,只是M.2硬盘设备节点变成了/dev/nvme0n1p
。这里我们就不重复写测试方法了。

这篇关于【正点原子Linux连载】 第四十六章 M.2硬盘驱动实验摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1003625

相关文章

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与