最新消息

[公告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 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

2013年5月1日 星期三

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

有了前面用RU在DOS或UEFI下,對SATA Controller下ATA Command取得HDD與ODD資訊(1)說明、用RU在DOS或UEFI下,對SATA Controller下ATA Command取得HDD與ODD資訊(2)操作,可能還是會有很多人早不清楚到底怎麼做,這裡做一個總結。
Step 1 : 找出幾個比較主要的Base Address
BAR1:AHCI Base Address (ABAR)
BAR2:Port Number Offset Base Address
BAR3:Command List Base Address (CLBAR)
BAR4:Command Frame Information Structure Base Address (FISBAR)
BAR5:Physical Region Descriptor Table Base Address (PRDTBAR)
BAR1 => BAR2 (BAR1 + Port Number * 80h + 100h) => BAR3 => BAR4(BAR3+08h) => BAR5(BAR4 + 80h)

Step 2 :找出Port Number是否有接上裝置,並判別裝置類型ATA(HDD)或ATAPI(ODD)
Device on this port:BAR2 + 24h
Device Type:BAR2 + 28h

Step 3 :填入ATA Command
(1)BAR4

(2)BAR5 + 0Ch Bit4設1、BAR5 + 0Fh Bit0設1

(3)BAR3 + 00h 設5(FIS表格共5個Double Word)、BAR3 + 02h Bit0設1(共1個PRDT表格)


Step 4 :驅動SATA controller執行Command
BAR2 + 18h Bit4設1
BAR2 + 38h Bit0設1
BAR2 + 18h Bit0設1
BAR2 + 38h 00h變為01h

Step 5 :最後在BAR5取得資訊

沒有留言:

張貼留言