【正点原子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

相关文章

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

Linux命令之firewalld的用法

《Linux命令之firewalld的用法》:本文主要介绍Linux命令之firewalld的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux命令之firewalld1、程序包2、启动firewalld3、配置文件4、firewalld规则定义的九大