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

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

第四十五章 SATA硬盘驱动实验

SATA(Serial Advanced Technology Attachment)存储接口是一种用于连接计算机硬盘、光驱和其他存储设备的串行接口标准。瑞芯微的RK3568芯片支持SATA外设接口,可以用来连接SATA接口的硬盘,本章我们就来学习一下如何使用RK3568的SATA接口。

45.1 SATA HOST简介
Sata Host为物理存储设备提供Sata (Serial Advanced Technology Attachment)存储接口。Sata Host支持以下特性:
包含3个端口,每个端口最多可连接5个设备,使用PM交换
整机SATA 1.5Gb/s,SATA 3.0Gb/s,SATA 6.0Gb/s
eSATA
兼容Serial ATA 3.3规格
兼容AHCI Revision 1.3.1
支持OOB信令检测和生成
整机支持机械状态开关和冷态检测
活动LED支持
支持设备热插拔
输出端口,用于指示COMRESET后协商的速度,以进行电源优化
内存ECC (Memory Data Protection)和Error Correction(Error Correction)
内存数据保护诊断错误注入
整机SATA 1.5Gb/s、SATA 3.0Gb/s、SATA 6.0Gb/s速度可调
异步信号恢复,包括重试轮询
电源管理功能,包括自动从部分状态切换到休眠状态
BIST环回模式
硬件辅助的本地命令队列,最多支持32个条目
支持基于fiss交换的端口倍增器
在关机模式下禁用RX和TX数据时钟
任意扇区大小
用于配置的AXI接口只支持单个
用于从内存中获取数据的AXI接口
更多介绍请参考RK3568的参考手册。
RK3568最大支持3个SATA存储接口,在正点原子ATK-DLRK3568底板上已经引出一路SATA2。SATA0和SATA1没有使能,与其他引脚有复用关系。
45.2 硬件原理图
正点原子的ATK-DLRK3568开发板底板板载了SATA接口,及SATA电源接口,原理图如下所示:

在这里插入图片描述

图45.2.1 sata接口原理图
SATA接口的引脚属于专用引脚,不能复用能GPIO模式,上图中我们只需要配置SATA2_ACT_LED引脚。SATA 数据传输使用两对差分信号线:一对用于发送数据,另一对用于接收数据。这两对差分信号线通常被称为 “TX+” 和 “TX-” 以及 “RX+” 和 “RX-”。也就是图中的SATA2_TXP和SATA_RXN以及SATA2_RXP和SATA2_RXN。
ATK-DLRK3568底板接口如下图图45.2.2。

图45.2.2 底板sata接口硬件图
45.3 实验程序编写
45.3.1 修改设备树
前面说过SATA所用的引脚属于专用引脚,只需要启用对应的控制器,对应的引脚将被设置成对应的模式。如SATA2_TXP引脚,参考08、RK官方文档01、LinuxRK356XDatasheet Rockchip_RK3568_Datasheet_V1.1-20210305.pdf可知这个引脚可以复用为PCIE20_TXP/SATA2_TXP/QSGMII_TXP_M1模式。在设备树里我们启用SATA节点,查看rk3568-atk-evb1-ddr4-v10.dtsi,可以看到以下内容:
示例代码45.3.1.1 启用SATA2

1&sata2 {
2        status = "okay";
3        pinctrl-names = "default";
4        pinctrl-0 = <&sata2_pins>;
5};ATK-DLRK3568,引出的是SATA2接口,所以使能sata2节点。接着我们在rk3568-pinctrl.dtsi文件中添加中断IO配置信息,如下
示例代码45.3.1.2 IO pinmux配置信息
1    sata {
2            /omit-if-no-ref/
3            sata_pins: sata-pins {
4                    rockchip,pins =
5                            /* sata_cpdet */
6                            <0 RK_PA4 2 &pcfg_pull_none>,
7                            /* sata_cppod */
8                            <0 RK_PA6 1 &pcfg_pull_none>,
9                            /* sata_mpswitch */
10                           <0 RK_PA5 2 &pcfg_pull_none>;
11           };
12   };
13
14   sata0 {
15           /omit-if-no-ref/
16           sata0_pins: sata0-pins {
17                   rockchip,pins =
18                           /* sata0_actled */
19                           <4 RK_PC6 3 &pcfg_pull_none>;
20           };
21   };
22
23   sata1 {
24           /omit-if-no-ref/
25           sata1_pins: sata1-pins {
26                   rockchip,pins =
27                           /* sata1_actled */
28                           <4 RK_PC5 3 &pcfg_pull_none>;
29           };
30   };
31
32   sata2 {
33           /omit-if-no-ref/
34           sata2_pins: sata2-pins {
35                   rockchip,pins =
36                           /* sata2_actled */
37                           <4 RK_PC4 3 &pcfg_pull_none>;
38           };
39   };
第1~12行,设置SATA0/1/2控制器相关控制IO。SATA_CP_DET引脚作用是SATA热拔插设备的插拔检测输入。SATA_CP_POD引脚作用是SATA控制热拔插设备电源开关输出。SATA_MP_SWITCH作用是SATA热拔插设备的开关检测输入。可以看到这里虽然配置了,但是我们的sata2的pinctrl并没有使用它,这是瑞芯微配置好的。这些IO可以不使用,RK官方板子也是不使用这些引脚。检测SATA硬盘的接入将由系统完成,系统会使用内核设备添加/移除事件检测SATA硬盘插入/移除之后完成一系列的操作。
第32~39行,这里配置了SATA2的LED,SATA2接口有数据传输时LED闪烁控制输出。

45.3.2 运行测试
ATK-DLRK3568 linux默认就支持SATA接口硬盘。无需我们重新修改设备树。直接在出厂的Linux buildroot系统上测试SATA硬盘是否支持。
1、SATA硬盘连接示意图
若你有接MIPI屏幕,需要将屏幕卸下,接口位于屏幕下面。请将SATA接口硬盘用SATA电源接口线与SATA数据接口线接上。本次以一个日立500GB固态硬盘为例,连接方法如下图,注意,请自备SATA数据线与电源线。SATA接口可热插拨,但是为了保护你的硬盘,建议先断电再插上,然后再开机。
在这里插入图片描述

图45.3.2.1 开发板连接SATA硬盘
开机后使用df指令查看硬盘是否已经挂载了。
df
可以看到下图,SATA硬盘会挂载在/media/目录下。比如笔者这个SATA硬盘挂载的目录为/media/usdisk0。
在这里插入图片描述

图45.3.2.2 SATA硬盘挂载目录
2、将硬盘分区
使用fdisk指令查看硬盘的节点。
fdisk -l // “-l”是-L,不是数字“1”。
在这里插入图片描述

图45.3.2.3 识别到一个500GB的硬盘
从上图图45.3.2.3可知,SATA挂载的节点为/dev/sda,现在开始格式化这个硬盘。如果你的硬盘已经有至少两个分区,那么就会有sda1和sda2。sda与sda1是什么区别?sda是硬盘的节点,sda是硬盘的第一个分区。笔者这个硬盘有两个分区,若还有其他分区则有sda3、sda4等等,依次类推。
因为笔者的这个盘已经是“vfat”格式了,说明可以被Linux识别并挂载,已经挂载的硬盘需要卸载才能被格式化。
所以笔者要卸载上面挂载的硬盘,如果你的硬盘未被挂载就不需要卸载了。
卸载硬盘,执行下面的指令。
umount /dev/sda*
在这里插入图片描述

图45.3.2.4 卸载SATA硬盘
现在我们将这个sda进行分区,执行下面指令。
fdisk /dev/sda
在这里插入图片描述

图45.3.2.5 开始对SATA硬盘分区
然后可以输入‘m’来查看使用帮助。
在这里插入图片描述

图45.3.2.6 输入‘m’查看帮助
常用的选项如下:
-l:列出所有磁盘的分区表信息;
-n:创建新分区;
-d:删除分区;
-t:修改分区的类型;
-p:打印分区表;
-u:以扇区为单位而非柱面为单位来显示和操作分区表;
-m:使用 DOS 兼容的模式。
-w:保存修改
我们输入‘n’,创建一个新分区,然后输入‘p’回车,因为我们这个硬盘分区表格式为MBR格式,支持最大的主分区个数为4个,若输入e的意思是拓展分区可以,可以是无数个逻辑分区。默认起始扇区是63,本次将第一个分区设置大小为1GB。
在这里插入图片描述

图45.3.2.7 创建分区
现在我们来分第二个分区,也是分做主分区。如下图步骤。这一次我们将起始位置默认为“2097215”了。因为这个位置刚好是前一个分区的末端。最后一个扇区作为终止位置,也就是说硬盘最大容量减去1GB的大小作为第二个扇区。最后不要忘记输入‘w’来保存修改,否则无法生效。当然你继续分区,根据你自己的需要,主分区只能分4个,扩展分区可以无数多个,之后再保存修改就可以了。
在这里插入图片描述

图45.3.2.8 SATA硬盘分区完成
好了,我们分区完成了,现在需要查看分区是否成功。可以看到下图有两个分区,sda1与sda2说明分区成功。
ls /dev/sda*
在这里插入图片描述

图45.3.2.9 查看SATA硬盘分区

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL精通之路】SQL优化(1)-查询优化(2)-范围查询优化

主博客&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(1)-WHERE子句-CSDN博客 下一篇&#xff1a; 【MySQL精通之路】SQL优化(1)-查询优化(3)-索引合并-CSDN博客 目录 1.单列索引的范围访问方法 …

快速搭建SpringMvc项目

一、什么是springMvc 1、介绍 Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08; spring-webmvc &#xff09;&#xff0c;但它通常被称为“Spring MVC”。 在控制…

JS片段:如何将文本复制到剪贴板

在构建网站时&#xff0c;一个非常普遍的需求是能够通过单击按钮将文本复制到剪贴板。在现代浏览器中&#xff0c;使用navigator.clipboardAPI 访问系统剪切板&#xff0c;利用clipboard.writeText复制到剪贴板&#xff0c;再通过clipboard.readText获取剪贴板内容即可实现。 …

GitLab的原理及应用详解(一)

本系列文章简介&#xff1a; 随着软件开发的不断进步和发展&#xff0c;版本控制系统成为了现代软件开发过程中不可或缺的一部分。而GitLab作为其中一种流行的版本控制工具&#xff0c;在软件开发领域享有广泛的应用。GitLab不仅提供了强大的版本控制功能&#xff0c;还集成了项…

springboot集成redis实现消息的订阅与发布

&#xff08;十九&#xff09;springboot实战——springboot集成redis实现消息的订阅与发布_springboot redis消息订阅-CSDN博客 https://blog.csdn.net/yprufeng/article/details/136151115 package com.yundi.atp.config;import org.springframework.context.annotation.Bea…

Linux x86_64 UEFI 启动

文章目录 前言一、UEFI二、Disk device compatibility2.1 GPT 磁盘分区表2.1.1 简介2.1.2 Linux 2.2 ESP&#xff08;EFI&#xff09; 文件系统2.2.1 简介2.2.2 LinuxLinux Kernel EFI Boot Stub 三、UEFI GPT grub23.1 简介3.2 引导方式 3.3 BOOTX64.EFI3.4 shimx64.efi3.5 …

DEV--C++小游戏(吃星星(1.2))

目录 吃星星&#xff08;1.2&#xff09; 该版本简介更新说明 分部代码 头文件命名空间变量 结构体 角色结构体 星星结构体 打印地图结构体 函数 函数声明 单人模式游戏函数 双人模式游戏函数 开始游戏函数 清屏函数 定点输出函数 隐藏光标函数 输入函数 单人…

wordpress子目录建站

在WordPress中建立在子目录的网站&#xff0c;你需要修改wp-config.php文件中的常量定义&#xff0c;使其指向正确的子目录路径。以下是修改步骤&#xff1a; 将WordPress安装包上传到你的子目录中。 解压缩安装包&#xff0c;如果你是通过FTP工具上传的&#xff0c;请确保上传…

React hooks - useReducer

useReducer 用法使用使用 Immer 更简单的编写 reducer 注意事项 用法 可同时更新多个状态&#xff0c;且能把对状态的修改从组件中独立出来&#xff0c;状态更新逻辑较复杂时可以考虑使用。代码逻辑更清晰&#xff0c;代码行为易预测&#xff1a;组件负责发出行为&#xff0c;…

通过Web网管切换到命令行界面【华为路由器】

一、注意事项 1.当前操作系统用户需要具有管理权限 2.设备仅呼出telnet客户端&#xff0c;设备仅发起telnet连接&#xff0c;不包括管理 3.不支持通过url地址或地址、端口的映射环境访问CLI控制台 二、准备条件 1.浏览器切换 CLI控制台只能使用IE浏览器&#xff0c;先把浏…

STM32自己从零开始实操02:输入部分原理图

一、触摸按键 1.1指路 项目需求&#xff1a; 4个触摸按键&#xff0c;主控芯片 TTP224N-BSBN&#xff08;嘉立创&#xff0c;封装 TSSOP-16&#xff09;&#xff0c;接入到 STM32 的 PE0&#xff0c;PE1&#xff0c;PE2&#xff0c;PE3。 1.2走路 1.2.1数据手册重要信息提…

SQL Server基础学习笔记

一. 什么是SQL Server&#xff1f; SQL Server是由微软公司开发的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它提供了存储、检索、处理和分析数据的功能。作为一种强大的数据库解决方案&#xff0c;SQL Server被广泛应用于企业级应用程序、Web应用程序、…

K8s之ku-be admin部署安装

目录 一、环境配置 1、机器部署 2、部署大致流程 二、实验环境配置 1、所有节点关闭防火墙核心防护以及关闭swap交换 2、所有节点安装docker 3、所有节点安装kubeadm&#xff0c;kubelet和kubectl 4、部署K8s集群 5、设定kubectl 6、所有节点部署网络插件flannel 7、…

netstat命令检查端口是否监听

要使用netstat命令检查端口是否监听&#xff0c;可以使用以下命令&#xff1a; netstat -tuln | grep <port>netstat -tuln 是一个常用的网络命令&#xff0c;用于显示系统的网络连接情况。这个命令的参数含义解释如下&#xff1a; -t 表示显示 TCP 协议的连接-u 表示显…

使用TensorFlow Lite Micro流程记录(带源码)

文章目录 0 关于tflite micro1 克隆仓库2 编译静态库3 模型转换4 编写工程5 编写demo5.1 进行算子注册 5.2 推理过程6 debug记录6.1 缺少算子 6.2 注册表太小6.3 段错误6.4 进一步减小库体积 7 实际部署 0 关于tflite micro 关于tflite micro在这里接不做过多介绍了&#xff0c…

2831. 找出最长等值子数组 Medium

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 如果子数组中所有元素都相等&#xff0c;则认为子数组是一个 等值子数组 。注意&#xff0c;空数组是 等值子数组 。 从 nums 中删除最多 k 个元素后&#xff0c;返回可能的最长等值子数组的长度。 子数组 是数组中一…

javaSwing仓库商品管理系统(文档+视频+源码)

摘要 Java swing实现的一款简单的仓库商品管理系统&#xff0c;数据库采用的是mysql&#xff0c;本系统实现了两个角色层面的功能&#xff0c;管理员可以管理用户、仓库、商品信息等。普通用户登录后可以查看商品、仓库信息及个人信息。 系统实现 登录界面&#xff1a; 我们…

分布式音乐播放器适配了Stage模型

OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;应用开发自API 8及其更早版本一直使用的是FA模型进行开发。FA模型是Feature Ability的缩写&#xff0c;它和PA&#xff08;Particle Ability&#xff09;两种类型是过往长期推广的术语&#xff0c;深入人心…

stm32常用编写C语言基础知识,条件编译,结构体等

位操作 宏定义#define 带参数的宏定义 条件编译 下面是头文件中常见的编译语句&#xff0c;其中_LED_H可以认为是一个编译段的名字。 下面代码表示满足某个条件&#xff0c;进行包含头文件的编译&#xff0c;SYSTEM_SUPPORT_OS可能是条件&#xff0c;当非0时&#xff0c;可以…

js代码控制bootstrap的模态框(modal)

在Bootstrap 5中&#xff0c;模态框&#xff08;Modal&#xff09;是一个自定义的HTML元素&#xff0c;可以用于创建对话框。通过导入Bootstrap的JavaScript模块&#xff0c;可以使用其API来控制模态框的显示和隐藏。以下是一个简单的示例说明如何使用Bootstrap 5中的模态框。 …