天天看點

WinCE中nandflash驅動開發介紹

歡迎加入Wince技術讨論群QQ#326444254

先來談一下flash,flash是一種非易失存儲器,一般flash儲存設備分為Nandflash和Norflash。這兩種flash各有優缺點。在讀寫速度上,norflash的讀速度快一些,nandflash的寫速度會快一些。Nandflash的容量一般都比Norflash大很多,而且相比價格比較便宜。但是Norflash支援XIP,而nandflash不支援,而且Nandflash可能有壞塊。相關的比較,網上很多文章都有介紹,這裡就說這麼多了。

  這裡介紹nandflash驅動,在WinCE中,有專門針對flash儲存設備驅動的支援,一般傳統采用FAL+FMD的架構。在WinCE最新的版本中,也就是Windows CE6.0 R2中,還支援MDD+PDD的架構。在FAL+FMD架構中,FAL層由微軟來實作,我們需要實作FMD層的相關接口函數。在MDD+PDD的架構中,MDD替換了原來架構中的FAL,而PDD相當于原來的FMD,隻要實作PDD層就可以了。如果你的系統已經更新到WinCE6.0 R2,那麼你應該可以在WINCE600PublicCOMMONOAKDRIVERS目錄下面找到這兩種架構驅動的源代碼。 由于MDD+PDD的架構在WinCE6.0 R2中才有支援,本人也沒有實作過。是以這裡隻介紹基于FAL+FMD架構下,nandflash驅動的開發,這也是目前大家都采用的開發flash驅動的架構。

  如上面所說,我們需要實作FMD層的相關接口,下面來介紹一下各個接口函數:

  1. PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut): 這個是Flash裝置的初始化函數。在WinCE啟動的時候,要加載Flash驅動時,首先調用這個函數對flash裝置進行初始化。如果你的系統中有nandflash的controller,那麼你需要在這裡對你的nandflash controller進行初始化。如果沒有的話,你需要針對你的硬體設計進行相關的片選,時序等進行配置。傳回一個handle表示成功,這個handle将被FMD_Deinit(..)函數用到,如果傳回NULL表示失敗。

繼續閱讀