当前位置: 首页 > news >正文

SATA系列专题之四:4.1 Command Layer命令分类详细解析

一、故事前传

在之前的文章中, 我们已经介绍了传输层(Transport Layer),链路层(Link Layer)以及物理层(Physical Layer)的相关内容。详见前期文章:

1,浅析SATA Physical Layer物理层OOB信号;

2,SATA Link Layer链路层解析2.0-2.3;

3,SATA Transport Layer传输层解析3.0-3.4;

4,SATA Command Layer命令层解析4.0;

我们这里主要解析Command layer命令层具体Command相关内容。

二、SATA Command Layer命令层具体解析

SATA Spec定义了12类Command,具体分类与对应的数量如下表:

那么,我们就对这12类Commands中作详细的介绍:

1. Command No Implemented

当Command无法执行时,状态如下图,Device需要做三件事情:

  1. 在ATA status register中将ERR bit 置为1;

  2. 在ATA error register中将abort bit置为1;

  3. 返回Register FIS-D2H更新shadow register.

    注:ATA status & error register详细介绍请见历史文章"SATA Transport Layer传输层解析".

2. Non-Data Commands

Non-Data Commands这一类的command sequence比较简单,主要是通过Register FIS在Host与device之间进行交互,如下图:

3. PIO Data-In Commands

PIO data-in command的作用是将device的数据读到host memory中,具体sequence如下:

PIO read SATA trace供参考:

4. PIO Data-Out Commands

PIO data-out command的作用是将host memory数据写入device。具体sequence如下:

5. DMA Data-In(Read) Commands

DMA read SATA trace供参考:

6. DMA Data-Out(Write) Commands

DMA write SATA trace供参考:

7. DMA Data-In(Read) Queued Commands

8. DMA Data-Out(Write) Queued Commands

9. COMRSET Sequence

10. Host Software Reset Sequence

相关文章:

  • XAI将创建一套机器学习技术,使人类用户能够理解、适当信任并有效管理新一代人工智能合作伙伴
  • 大数据之ZooKeeper(二)
  • 2021CCPC新疆省赛题解BDEFGHIJK
  • Hyperledge Fabric-身份与角色认证
  • SpringAOP底层原理
  • 【高等数学基础进阶】多元函数的极值与最值
  • QT使用MSVC编译器时中文报错问题
  • Java Double toString()方法具有什么功能呢?
  • 猿创征文|Spring Boot日志
  • Blue Prism 异常处理
  • PCL 环境下安装配置CGAL 5.5
  • Code For Better 谷歌开发者之声——盘点大家用过的Google 产品
  • Android基本界面控件、部分属性方法解析
  • Qt5开发从入门到精通——第六篇二节( 图像与图片——基础图形的绘制 )
  • Hive学习笔记2
  • Angular Elements 及其运作原理
  • Angular数据绑定机制
  • angular学习第一篇-----环境搭建
  • Golang-长连接-状态推送
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript对象详解
  • Netty源码解析1-Buffer
  • Python进阶细节
  • Service Worker
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 从零开始的无人驾驶 1
  • 关于 Cirru Editor 存储格式
  • 诡异!React stopPropagation失灵
  • 浅谈web中前端模板引擎的使用
  • 容器服务kubernetes弹性伸缩高级用法
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • raise 与 raise ... from 的区别
  • 交换综合实验一
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #162 (Div. 2)
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (12)Hive调优——count distinct去重优化
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .CSS-hover 的解释
  • .NET Core 成都线下面基会拉开序幕
  • .NET 材料检测系统崩溃分析
  • .Net7 环境安装配置
  • .net反混淆脱壳工具de4dot的使用
  • .project文件
  • // an array of int
  • /etc/motd and /etc/issue