最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

2013年4月28日 星期日

用RU在DOS或UEFI下,對SATA Controller下ATA Command取得HDD與ODD資訊(1)

工作上需要取得HDD與ODD機器的訊息,花了些時間將ATA Command相關的方法整理得一下,以便以後的查詢。
一般網路上可以找到的HDD檢測程式不外乎以CrystalDiskInfoHD Tune等為主,這兩款程式大抵以ATA Command來取得有關HDD的所有資訊,對此自己也可以寫一個專屬於檢測HDD的小程式來玩玩。
先了解如何使用ATA Command來取得HDD的相關方法,這裡將需要4份Specification來搭配著RU(目前有DOS、UEFI與Windows,有需要的請自行下載)在UEFI環境下使用,如
  1. Intel® 6 Series Chipset and Intel® C200 Series Chipset (可以用舊的Intel Chip或是AMD Chip皆可)
  2. AT Attachment 8 - ATA/ATAPI Command Set
  3. Serial ATA AHCI 1.3 Specification
  4. SATA Storage Technology
  5. Information Technology - AT Attachment with Packet Interface - 7 Volume 1 - Register Delivered Command Set, Logical Register Set (ATA/ATAPI-7 V1)  or  Information Technology - AT Attachment with Packet Interface - 6 (ATA/ATAPI-6)
底下將DOS、UEFI、Windows上取得HDD資訊可用到的方法做一整理。

DOS
UEFI
Windows
方法一
ATA Command + int13
EFI_ATA_PASS_THRU_PROTOCOL
WMI
方法二
ATA Command + IO
EFI_DISK_INFO_PROTOCOL
ATA Command + DeviceIoControl
方法三

ATA Command + IO


接下來將一步步操作RU對SATA Controller下ATA Command取得HDD與ODD的相關資訊。
在Intel® 6 Series Chipset and Intel® C200 Series Chipset 中找出需使用到的AHCI相關表格資訊如AHCI Base Address Register/Serial ATA Index Data Pair Base Address、AHCI Register Address Map與Port Registers。
在AT Attachment 8 - ATA/ATAPI Command Set中找出IDENTIFY DEVICE、IDENTIFY PACKET DEVICE。

透過AT Attachment 8 - ATA/ATAPI Command Set、Serial ATA AHCI 1.3 Specification整理出需使用到的ATA Command。


Identify Data HDD
Identify Data ODD
Attribute Values
Attribute Thresholds
Enable SMART
Disable SMART
SMART STATUS
Input
Feature
XX
XX
D0h
D1h
D8h
D9h
DAh
Sector Count
01h
01h
01h
01h
XX
XX
XX
Sector Number
XX
XX
XX
XX
01h
01h
XX
LBA Low
XX
XX
4Fh
4Fh
4Fh
4Fh
4Fh
LBA High
XX
XX
C2h
C2h
C2h
C2h
C2h
Device/Head
XX
XX
A0h
A0h
XX
XX
XX
Command
ECh
A1h
B0h
B0h
B0h
B0h
B0h
Output
Return Byte
512
512
512
512
0
0
0


接續下一篇 用RU在DOS或UEFI下,對SATA Controller下ATA Command取得HDD與ODD資訊(2)

沒有留言:

張貼留言