【正点原子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,一经查实,立即删除!

相关文章

快速搭建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获取剪贴板内容即可实现。 …

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; 该版本简介更新说明 分部代码 头文件命名空间变量 结构体 角色结构体 星星结构体 打印地图结构体 函数 函数声明 单人模式游戏函数 双人模式游戏函数 开始游戏函数 清屏函数 定点输出函数 隐藏光标函数 输入函数 单人…

通过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数据手册重要信息提…

K8s之ku-be admin部署安装

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

使用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…

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;可以…

C++设计模式|结构型 适配器模式

1.什么是适配器模式&#xff1f; 可以将⼀个类的接⼝转换成客户希望的另⼀个接⼝&#xff0c;主要⽬的是 充当两个不同接⼝之间的桥梁&#xff0c;使得原本接⼝不兼容的类能够⼀起⼯作。 2. 适配器模式的组成 &#xff08;1&#xff09;接口类&#xff0c;给客户端调用&…

vue的异步操作,钩子函数,和Element组件

使用vue进行异步操作 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </…

XV4001KD汽车级应用的数字输出陀螺传感器

XV4001KD是一款专为汽车导航系统和远程信息处理而设计的数字输出陀螺传感器。采用SPI/I2C串行接口&#xff0c;具有高精度的16位的角速率输出和11位的温度输出功能&#xff0c;能够准确地测量车辆的运动状态和环境温度&#xff0c;为导航系统和信息处理提供可靠的数据支持。以及…

《二》MP3在线搜索所歌曲的实现

上一期我们大致实现了布局等操作 那么这一期我们来实现如何去搜索歌曲&#xff1a; 首先呢&#xff0c;我们是设计多媒体&#xff0c;要包含多媒体类头文件&#xff0c;还要能在线搜索&#xff0c;那就要包含网络上的头文件&#xff0c;还要实现打开文件操作&#xff0c;处理…

Pytorch DDP分布式细节分享

自动微分和autograde 自动微分 机器学习/深度学习关键部分之一&#xff1a;反向传播&#xff0c;通过计算微分更新参数值。 自动微分的精髓在于它发现了微分计算的本质&#xff1a;微分计算就是一系列有限的可微算子的组合。 自动微分以链式法则为基础&#xff0c;依据运算逻…

kubeadm部署k8s v1.28

一、主机准备 主机硬件配置说明 作用IP地址操作系统配置k8s-master01192.168.136.55openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node01192.168.136.56openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node02192.168.136.57openEuler-22.03-LTS-SP12颗CPU 4G内存 50G…

安全生产月答题pk小程序怎么做

在当今信息化时代&#xff0c;小程序已成为人们日常生活和工作中不可或缺的一部分。特别是在安全生产领域&#xff0c;通过小程序进行答题PK活动&#xff0c;不仅可以提高员工的安全意识&#xff0c;还能促进团队间的协作与交流。本文将详细介绍如何制作一款安全生产月答题PK小…

初识DataX3.0

目前接到任务&#xff0c;让同步表数据。市面很多同步工具不一一尝试了&#xff0c;信赖阿里&#xff0c;所以调研了一下阿里的dataX,一点点来吧&#xff0c;学习为主 环境准备&#xff1a;linux6.8 python自带的2.7 MySQL 5.7.1 1.先下载&#xff1a; wget http://datax-o…

油猴脚本使用cookie一般是某请求返回的setcookie,一般不是js生成的,直接请求拼接

写完hook脚本 删除页面cooike&#xff0c;打开开发者模式&#xff0c;刷新页面 cookie一般是某请求返回的setcookie,一般不是js生成的&#xff0c;直接请求拼接带cookie请求 看网络里的cookie httponly打钩的是服务器返回的&#xff0c;但不一定对&#xff0c;还是要看保存日…