SATA信息传输FIS结构总结通过实例代码(快速)掌握(二)

news2024/11/28 20:36:45

目录

    • 一、简介
    • 二、总体介绍
      • 2.1 详细FIS传输过程
      • 2.2 FIS内容详解
    • 三、FIS实例
      • 3.1 构造一个write FIS
        • 3.1.1 WRITE FIS内容
        • 3.1.2 协议分析仪trace分析
        • 3.1.3 write过程总trace
      • 3.2 构造一个read FIS
        • 3.2.1 READ FIS内容
        • 3.2.2 协议分析仪 read trace
        • 3.2.3 read过程总trace
      • 3.3 FIS和Command List储存
        • 3.3.1 HBA Memory Space Usage
        • 3.3.2 具体FIS存放规则
      • 3.4 Comand List
        • 3.4.1 Port System Memory Structures
        • 3.4.2 command具体内容
        • 3.4.3 构造一个Command List
    • 四、其他trace
      • 4.1 PIO SETUP FIS
      • 4.2 DMA SETUP FIS
      • 4.3 DATA FIS
      • 4.4 Set Device Bist FIS
    • 五、其他链接
      • 1、SATA模块之HBA卡开发总结
      • 2、PCIe物理层总结-PCIE专题知识(一)
      • 3、PCIe数据链路层图文总结-PCIe专题知识(二)
      • 4、SSD硬盘SATA接口和M.2接口区别总结

一、简介

FIS是一种用于Host和device之间信息传输的机制,每个FIS的格式都是固定的,并且对应唯一的ID。本文主要介绍常用FIS传输过程和对FIS内容进行详解,通过构造的FIS例子方便大家快速掌握FIS,常用的FIS TYPE如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/7a5be2d656f04f48a6a4f45313c8a5b2.png

二、总体介绍

2.1 详细FIS传输过程

当双方都空闲时,都在持续发送 SYNC 原语,这种状态称为空闲状态(IDLE)。发送方想要发起 FIS 发送,它开始持续发送 X_RDY 原语。经过一段延迟后,接收方收到了 X_RDY (该延迟来自链路层、物理层的信号处理延迟),此时如果接收方准备好接收 FIS 了,就持续发送 R_RDY 原语。发送方收到了 R_RDY 原语,就发送一个 SOF 原语,随后紧跟着逐个发送 FIS 数据包的 dword (包括 FIS-type,Payload,CRC),最后一个 dword (CRC) 发送完后要紧跟一个 EOF 原语,然后持续发送 WTRM 原语。接收方收到 SOF 后,开始持续发送 R_IP 原语,指示接受正在进行 (receiving in progress) 。完整地收完 FIS 后进行 CRC 检查。在收到 WTRM 原语后,如果 CRC 检查正确,就持续发送 R_OK 原语,否则持续发送 R_ERR 原语。发送方收到 R_OK 或 R_ERR 后,开始持续发送 SYNC 。接收方收到 SYNC 后,也开始持续发送 SYNC ,至此回到空闲状态,FIS 传输结束。如果发送方收到的是 R_ERR ,就向上层报告错误,上层决定是否重传该 FIS 。

从该过程我们可以看到,当一个通道发送 FIS 时,另一个通道在发送 R_RDY, R_IP, R_OK, R_ERR 这四种原语来控制对方发送 FIS 的过程,因此在一个时间点上 FIS 不可能双向发送。换句话说,SATA在物理上是全双工,在逻辑上是半双工。

另外,由于 HBA 和 device 都有发起 FIS 发送过程的权力,因此有可能刚好 HBA 和 device 都在发送 X_RDY,同时试图启动 FIS 发送。SATA规定这种情况下 HBA 总是要让着 device : HBA 只要检测到了 device 发来的 X_RDY ,就要放弃当前的发送进程,转而发送 R_RDY ,准备接收 device 发来的 FIS 。
在这里插入图片描述

2.2 FIS内容详解

在这里插入图片描述C -当寄存器传输是由于命令寄存器的更新时,这个位被设置为1。当寄存器传输由于设备控制寄存器的更新而被设置为零。
Control -包含Shadow Register的设备控制寄存器的内容
Command - 包含Shadow Register块的命令寄存器的内容
Device-包含Shadow Register的设备寄存器的内容
LBA(7:0) - Contains the contents of the LBA low register of the Shadow Register Block.
LBA(15:8) - Contains the contents of the LBA mid register of the Shadow Register Block.
LBA(23:16) - Contains the contents of the LBA high register of the Shadow Register Block.
LBA(31:24) - Contains the contents of the expanded address field of the Shadow Register Block
LBA(39:32) – Contains the contents of the expanded address field of the Shadow Register Block
LBA(47:40) – Contains the contents of the expanded address field of the Shadow Register Block
Features(7:0) - Contains the contents of the Features register of the Shadow Register Block
Features(15:8) – Contains the contents of the expanded address field of the Shadow Register Block
PM Port – If an endpoint device is attached via a Port Multiplier, specifies the device port address that the FIS should be delivered to.This field is set by the host.
R – Reserved – shall be cleared to zero.
Count(7:0) - Contains the contents of the Sector Count register of the Shadow Register Block.

三、FIS实例

3.1 构造一个write FIS

通过协议可以看到一个write buffer的FIS COMMAND是0xE8,然后Device位根据描述可以填写。
在这里插入图片描述

3.1.1 WRITE FIS内容

在这里插入图片描述

3.1.2 协议分析仪trace分析

对照2.2所描述的FIS结构,SOF可以不关注,第二行开始依次对应一个Dword。
分析第一个Dword,0x0A618027,bit[7:0] = 27代表FIS TYPE,bit[11:8] = 0表示不支持PMP,bit[15:12] = 0x8,表示C bit置位,应从COMMAND位读取bit [23:16] = 0x61为WRITE FPDMA命令,Sector count bit[31:24] = 0x0A,即10 LBA,后面的FIS依次参考分析。
在这里插入图片描述

3.1.3 write过程总trace

在这里插入图片描述在这里插入图片描述

3.2 构造一个read FIS

通过协议可以看到一个read buffer的FIS COMMAND是0xE4,然后Device位根据描述可以填写。
在这里插入图片描述

3.2.1 READ FIS内容

在这里插入图片描述

3.2.2 协议分析仪 read trace

具体分析过程参考3.1.2 write过程
在这里插入图片描述

3.2.3 read过程总trace

在这里插入图片描述

3.3 FIS和Command List储存

HBA使用系统内存的一个区域来通信接收到的fis上的信息。该结构由PxFBU和PxFB所设置的值。
对每个port对应的P#CLB和P#FB寄存器进行赋值
在这里插入图片描述

3.3.1 HBA Memory Space Usage

具体存放位置如下:
在这里插入图片描述

3.3.2 具体FIS存放规则

在这里插入图片描述
当DMA设置FIS从设备到达时,HBA将其复制到该结构的DSFIS区域。
当一个PIO设置FIS从设备到达时,HBA将其复制到该结构的PSFIS区域。
当D2H寄存器FIS从设备到达时,HBA将其复制到该结构的RFIS区域。
当Set Device Bits FIS从设备到达时,HBA将其复制到该设备的SDBFIS区域。

3.4 Comand List

主机与Device通信是通过FIS进行相互通知,通知后Device根据命令内容从command list对应的地址去获取相应的信息。
一个Port最多支持32个command,同时不同的command对应不同的command table。

3.4.1 Port System Memory Structures

在这里插入图片描述

3.4.2 command具体内容

Command List Structure
整体结构内容如下:
在这里插入图片描述
详细内容介绍:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4.3 构造一个Command List

在这里插入图片描述

Command Table
在这里插入图片描述
Command FIS (CFIS)
这是一个软件构建的FIS。对于数据传输操作,这是H2D寄存器FIS格式Serial ATA Revision 2.6规范中规定的。HBA卡设置PxTFD.STS。BSY,然后发送此结构为附加端口。如果附加了端口倍增器,则该字段必须具有端口倍增器FIS本身的端口号-它不能由HBA卡添加。CFIS的有效长度为2 ~ 16个Dwords并且必须是Dword粒度。
ATAPI Command (ACMD)
这是一个软件构造的区域,长度为12或16字节,包含ATAPI命令to如果在命令头中设置了“A”位,则发送。ATAPI命令长度为12或16字节在长度。HBA卡传输的长度由bios发送的PIO设置FIS决定请求ATAPI命令的设备。
Physical Region Descriptor Table (PRDT)
该表包含数据传输的分散/收集列表。它包含一个0的列表(没有数据要传输)最多65,535个条目。PRD表中每个字段的细分如下所示。第0项是指在PRD表中的第一个条目。“CH[PRDTL] - 1”指的是表中的最后一项,其中长度为字段来自该命令槽的命令列表条目中的PRDTL字段。

四、其他trace

4.1 PIO SETUP FIS

在这里插入图片描述

4.2 DMA SETUP FIS

在这里插入图片描述

4.3 DATA FIS

在这里插入图片描述

4.4 Set Device Bist FIS

在这里插入图片描述

五、其他链接

1、SATA模块之HBA卡开发总结

2、PCIe物理层总结-PCIE专题知识(一)

3、PCIe数据链路层图文总结-PCIe专题知识(二)

4、SSD硬盘SATA接口和M.2接口区别总结

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

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

相关文章

【自制】我与GPT3.5合作,一天制作一个生成手写文字图片的软件

视频讲解地址:https://www.bilibili.com/video/BV1uC4y127ME/ bgm我与GPT3.5合作,一天制作一个生成手写文字图片的软件 请给出一个程序,左边显示一个图片,将图片放入进去,可以在里面画出一个框, 右边窗口…

MQTT客户端MQTT.fx 1.7.1下载、安装和界面介绍

MQTT.fx是一款基于Eclipse Paho,使用Java语言编写的MQTT客户端工具。支持通过Topic订阅和发布消息,用来前期和物理云平台调试非常方便。 1.下载 1.1.访问官方下载地址下载,但是下载不到1.7.1版本 1.2.在连接网页末尾点击立即下载,…

Linux(9):正规表示法与文件格式化处理

简单的说,正规表示法就是处理字符串的方法,他是以行为单位来进行字符串的处理行为,正规表示法透过一些特殊符号的辅助,可以让使用者轻易的达到【搜寻/删除/取代】某特定字符串的处理程序。 正规表示法基本上是一种【表示法】&…

【从入门到起飞】JavaSE—多线程(2)(lock锁,死锁,等待唤醒机制)

文章目录 🌺lock锁⭐获得锁⭐释放锁✨注意🏳️‍🌈代码实现🎈细节 🌺死锁⭐解决方法 🎄等待唤醒机制⭐代码实现🎈注意 🛸使用阻塞队列实现等待唤醒机制 🍔线程的六种状态…

AOP + 自定义注解实现日志打印

1. 先定义个注解,让它作用于方法上 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface Loggable {}2. 定义切面 Aspect Component Slf4j public class LogMethodCallAspect {Pointcut("annotation(com.wy.spring_demo.aop.…

1panel在应用商店里面安装jenkins

文章目录 目录 文章目录 前言 一、使用步骤 1.1 填写安装参数 1.2 在界面中进入容器拿到自动生成的jenkins密码 前言 一、使用步骤 1.1 填写安装参数 在应用商店里面搜索jenkins,然后点击安装 填写参数 1.2 在界面中进入容器拿到自动生成的jenkins密码 命令 cat /var/jenki…

【数据结构与算法篇】一文详解数据结构之二叉树

树的介绍及二叉树的C实现 树的概念相关术语树的表示 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一 个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树, 也就是说它是根朝上,而叶朝…

上海站报名启动! 2023年开源产业生态大会OpenHarmony生态分论坛

作为年内开源领域不容错过的科技盛宴,2023年开源产业生态大会将于12月19日在上海盛大开幕。本次活动由上海市经济和信息化委员会、上海市科学技术协会和"科创中国"开源创新联合体共同指导,上海开源信息技术协会统筹主办。 届时,大会…

WEB渗透—反序列化(六)

Web渗透—反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩哔_…

黑马程序员索引学习笔记

文章目录 索引的分类从索引字段特性从物理存储从数据结构组成索引的字段个数 InnoDB主键索的Btree高度为多高呢?explain执行计划最左匹配原则索引失效情况SQL提示覆盖索引、回表查询前缀索引索引设计原则 索引的分类 从索引字段特性 主键索引、唯一索引、常规索引、全文索引…

2023 年最新百度智能云千帆大模型 Node.Js 本地测试 / 微信机器人详细教程(更新中)

千帆大模型概述 一站式企业级大模型平台,提供先进的生成式AI生产及应用全流程开发工具链。直接调用ERNIE-Bot 4.0及其他主流大模型,并提供可视化开发工具链,支持数据闭环管理、专属大模型定制、大模型训练调优、插件编排等功能。 千帆大模型…

RHCE---给openlab搭建web网站

作业:请给openlab搭建web网站 网站需求: 1.基于域名 www.openlab.com 可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站, 1、基于 www.openlab.com/student 网站访问学生信…

中国一年有457万人确诊癌症!医生提示:这4种食物,再爱吃也要管住嘴

癌症是威胁人类生命健康的重大疾病,癌症的发生因素一直以来都是专家学者重点探索的课题。据世卫组织最新公布的数据显示,食物或与癌症发生之间存在着密切的联系,某些食物的摄入过多可能会增加患癌症的风险,所以我们应该警惕&#…

LeetCode Hot100 124.二叉树中的最大路径和

题目: 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和 是路径中各节点值的总和。 给你一个二叉树的根节点…

佳易王个体诊所门诊电子处方软件试用版下载,佳易王电子处方软件的配方模板功能作用与教程

佳易王个体诊所门诊电子处方软件试用版下载,佳易王电子处方软件的配方模板功能作用与教程 1、软件试用版及教程可以点击下方的官网卡片 2、软件中有一个实用的功能,配方模板功能,在开处方单时候可以一键导入配方,节省时间。 而…

2024年天津天狮学院专升本市场营销专业《市场营销学》考试大纲

2024年天津天狮学院专升本市场营销专业高职升本入学考试《市场营销学》考试大纲 一、考试性质 《市场营销学》专业课程考试是天津天狮学院市场营销专业高职升本入学考试的必 考科目之一,其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《市…

2019年全国硕士研究生入学统一考试管理类专业学位联考英语(二)试题

文章目录 2019年考研英语二真题SectionⅠ Use of EnglishSection II Reading ComprehensionText 121——细节信息题22——细节信息题23——细节信息题24——细节信息题25——词义题 Text 226——细节信息题27——细节信息题28——细节信息题29——细节信息题30——态度题 Text …

6.3 Windows驱动开发:内核枚举IoTimer定时器

内核I/O定时器(Kernel I/O Timer)是Windows内核中的一个对象,它允许内核或驱动程序设置一个定时器,以便在指定的时间间隔内调用一个回调函数。通常,内核I/O定时器用于周期性地执行某个任务,例如检查驱动程序…

基于helm的方式在k8s集群中部署gitlab - 升级(三)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署(一),本篇重点对gitlab在k8s集群中进行升级 文章目录 1. gitlab 升级1.1 获取release1.2 下载目前版本的gitlab charts1.3 获取当前的values文件1.4 升级 2. gitlab数据库升级2.1 备份数…

【Linux】记录错误信息日志的实现

文章目录 前言一、 目录实现(log.hpp)二、目录的具体使用1.comm.hpp(管道初始化)2.sever.cpp(为读端且令其创建命名管道)3.client.cpp(为写端) 前言 我们这个设计的日志可以自定以输出的方向,可…