SATA驱动; AHCI端口初始化;启动(ST)命令列表;

时间:2017-04-11 07:08:12

标签: driver hardware osdev sata

我在开发板上初始化和运行AHCI端口时遇到问题。 处理器具有SATA主机控制器,实现了2个端口(端口0和端口1)。带有SATA接口的SSD驱动器连接到端口1。

根据" Serial ATA AHCI 1.3.1规范",章节" 10.3.1开始(PxCMD.ST)"在将PxCMD.ST设置为' 1'之前,应该满足一系列条件。设置此位后,应设置PxCMD.CR以指示端口已准备就绪并运行。

问题是PxCMD.CR永远不会被设置。

启用PxCMD.ST之前的状态:

  • 端口处于空闲状态,PxCMD.STPxCMD.CR都是' 0'
  • FIS接收启用,PxCMD.FRE是' 1'
  • 云端硬盘已连接到端口,PxSSTS = 0x00000133SSTS.IPM = 1SSTS.SPD = 3SSTS.DET = 3),PxTFD = 0x00000150TFD.STS.BSY = 0,{{1 },TFD.STS.DRQ = 0
  • TFD.STS.ERR = 0设置了物理地址到缓冲区并且缓冲区已对齐。 (1KB缓冲区,1KB对齐)
  • PxCLB/PxCLBUPxCMD = 0x00404010& PxCMD.FBSCP = 1

设置PxCMD.FRE = 1后,PxCMD.STPxCMD = 0x00404011会停留' 0'

  • PxCMD.CR保持不变。在设置PxSERR = 0
  • 之前,会事先清除ERR
  • PxCMD.FREPxSCTL = 0x00000330IPM = 3SPD = 3
  • DET = 0保持不变
  • PxTFD = 0x00000150。当驱动器未连接时,注册表PxSIG = 0x00000101


假设0xFFFFFFFF已设置且PxSIG为' 0'更可能是SATA HC for PLL设置正确。

我担心PxSERR(当驱动器已断开连接时PxTFD.ERR = 1具有默认PxTFD值和0x7F),但未找到相关或未考虑还是PxTFD.ERR = 0


错过了什么理想?



PS:它与Linux无关。

0 个答案:

没有答案