想要寫一支Driver來控制硬碟發送ATA command,必須了解三份Spec
- ATA (AT Attachment): 這是一份軟體的spec,定義了command的種類
- AHCI or IDE : 這是controller的spec, 說明如何控制controller發出ATA command給碟機
- SATA :定義HW(phy)的行為,如power management及一些encoding/decoding, Link規則...等等
這邊列舉一些常見的ATA command, 並以我開發的tool, 下圖,來介紹一些常見的command。
- 25h: Read DMA ext: 傳統的Read
- 35h: Write DMA ext: 傳統的Write
- 60h: Read FDMA Queued :這就是 NCQ read
- 61h: Write FDMA Queued :NCQ write
- ECh: Identify : 這個command帶有512Byte的table,用來提供host查詢碟機的能力
- E0h: Standby Immediately: 用於斷碟機電前, host發此命令告訴碟機
- EFh: Set feature: host可以透過這個command來開啟碟機一些能力,如Partial/Slumber...
- 06h: Data Set Management :這就是Trim command,用來告訴碟機哪些LBA是無效的資料請碟機刪掉。這個command對SSD尤其重要,若沒有這個command, SSD firmware 裡的GC(Garbage Collection)將不會回收一些無效的LBA而導致硬碟用久後效能低落
- 92h: Download Microcode: 碟機廠家用此command來update 碟機內部的firmware
沒有留言:
張貼留言