检测sata设备:

  1. 检测hba的存在
  2. 根据hba的port挨个检测是否连接。根据intel文档,需要检测的项有:pxssts.det=03h,pxssts.ipm=02h或06h
  3. 检测signature,0101的就是sata了

初始化sata设备:

  1. 关闭指令执行。设置pxcmd.st=0,pxcmd.fre=0。
  2. 将command list重新定位。要注意:command list对齐是1k的,received fis是256对齐,command table则是128对齐。由于command table的长度是128+16*n,n是prdt的项数。所以,一般来说,n应取8的倍数。尤其需要注意的是,每个prdt虽然可以支持4mb,但sata标准对dma读取最大只支持8k,因此若你需要使用dma一次读取很多扇区,则用于command list的存储空间会相当的大。
  3. 启用指令执行。设置pxcmd.fre=1,pxcmd.st=1。

读取/写入sata设备

  1. 通过pxsaac和pxci找到空闲的command slot。
  2. 将这个slot的prdt顺序指向缓冲区,注意设置每个prdt的byte count,这是从0开始的,0表示1。
  3. 设置command header的prdtl,注意这是从1开始的,1表示1。根据读取/写入设置command header的w。
  4. 设置command header的fis为h2d register fis。视乎所用的具体指令,设置fis的command和c。设置起始扇区和操作扇区数,具体参考sata标准。注意不同的fis,对不同字段的使用方式不同。
  5. 先设置pxsaac,然后设置pxci,让hba开始传输指令。
  6. 检测pxsaac,看这个slot是否空闲。如果空闲,则说明传输已经完成。查看各个错误寄存器,是否有错误发生。

总体来说,初始化过程非常麻烦,而且8k的读取限制对prdt的内存需求太高。但使用起来并不麻烦。另外,无法得知设备的扇区大小,只能假定为512字节。

AHCI sata设备初始化流程相关推荐

  1. DPDK — L2 Forwarding 与网卡设备初始化流程

    目录 文章目录 目录 L2 Forwarding Application 安装部署 部署拓扑 编译运行 L2fwd 测试 L2 转发功能 实现分析 L2 转发原理 代码注释 函数调用关系图 网卡设备初 ...

  2. coreboot学习9:ramstage阶段之设备初始化流程

    本文对ramstage阶段的设备初始化过程进行跟踪.设备初始化是在dev_initialize函数中完成的,代码如下: void dev_initialize(void) {struct bus *l ...

  3. Linux内核网络栈1.2.13-网卡设备的初始化流程

    参考资料 <<linux内核网络栈源代码情景分析>> 网卡设备的初始化 本文主要描述一下网卡设备的整个初始化的过程,该过程主要就是根据设备的硬件信息来获取与传输网络数据,注册相 ...

  4. linux内核ufs设备树,Linux内核初始化流程笔记

    Linux内核初始化流程笔记 分类: LINUX 作者:gfree.wind@http://www.doczj.com/doc/fc580419c1c708a1294a4409.html 博客:htt ...

  5. android6.0源码分析之Camera API2.0下的初始化流程分析

    1.Camera2初始化的应用层流程分析 Camera2的初始化流程与Camera1.0有所区别,本文将就Camera2的内置应用来分析Camera2.0的初始化过程.Camera2.0首先启动的是C ...

  6. Ethercat解析(十四)之初始化流程

    一.EtherCAT入口 源代码执行命令sudo /etc/init.d/ethercat start,将会从文件module.c文件中的ec_init_module函数中开始往下执行初始化流程. 二 ...

  7. linux中流设备_[快速上手Linux设备驱动]之块设备驱动流程详解一

    [快速上手Linux设备驱动]之块设备驱动流程详解一 walfred已经在[快速上手Linux设备驱动]之我看字符设备驱动一 文中详细讲解了linux下字符设备驱动,并紧接着用四篇文章描述了Linux ...

  8. 【SPRD CAMERA】1 HAL层初始化流程

    一.前言 根据我的理解以前android在启动camera service 会直接去操作hal层,这样hal层和framework就耦合在一起了.现在 Android O 中,加入了Camera Pr ...

  9. SD/eMMC初始化流程、读写流程(dwc mshc)

    目录 1.芯片简介 1.1 模块与接口 1.2 SD/eMMC初始化流程 1.3 SD/eMMC数据传输流程 1.3.1 传输模式 2.调试问题 2.1 uboot 2.1.1 连续读4个以上bloc ...

最新文章

  1. php $this self,php this self 用法与区别
  2. jdk javac运行不了_Intellij IDEA搭建jdk源码阅读环境
  3. vc6.0 点击鼠标获取mysql数据库所在行_VC6.0连接到mysql数据库
  4. 算法设计与分析男女匹配问题C语言,C语言解决新郎和新娘配对问题代码解析
  5. 病毒在网络上传播的基本途径分析
  6. hdu 1022 Train Problem I 解题报告
  7. javascipt很有用的代码,实现全选与反选,还可以与struts2或sevelet交互使用
  8. 迅雷前CEO陈磊涉嫌职务侵占罪已被立案侦查,股价周四下跌超7%
  9. 《如何搭建小微企业风控模型》第七节 准入规则节选
  10. 酒店客房管理系统(C语言)
  11. 2021-03-03-Beamforming algorithms - beamformers
  12. html ol标签用罗马数字,HTML重点标签总结
  13. 40岁后学习编程是否太晚了?7点技巧让学习变得轻松有趣
  14. 鸿蒙 什么意思,鸿蒙是什么意思和拼音怎么读
  15. ios安装fiddler证书
  16. “一把梭:REST API 全用 POST”
  17. 头脑王者小程序开发源码分析
  18. 5G网络入门基础--5G网络的实现流程
  19. 2022前端面试(一面面试题)
  20. Keras中predict()方法和predict_classes()方法和evaluate()方法

热门文章

  1. 哪些东西做引流产品比较好?哪些商品是每天比较受欢迎的?
  2. XP与Win7默认下时间分隔符不同
  3. obs多推流地址_OBS下载、安装、使用(腾讯)推流直播教程
  4. python判断火车票座位_Python3 实现火车票查询工具
  5. 乐器php毕业论文,打击乐器在音乐课堂教学中的应用
  6. 共享店铺系统如何设计?具体如何做?
  7. 发表Nature等杂志四十多篇论文老师带您学单细胞测序数据挖掘和课题设计 2020年1月11-12日 上海...
  8. CSDN下载资源报错:This XML file does not appear to have any style information associated with it.
  9. 无线抄表火热,ZigBee暂输于专用协议[转]
  10. 地面气象观测数据-A文件转excel方法