NorFlash原理及硬體操作

2021-08-21 23:58:07 字數 2089 閱讀 8526

使用uboot體驗nor flash的操作(開發板設為nor啟動,進入uboot)

先使用openjtag燒寫uboot到nor flash

nor flash可以像nei記憶體一樣讀,但不可以向記憶體一樣寫

1. 讀資料

md.b 0 

2. 讀id

nor手冊上:

往位址555h寫aah

往位址2aah寫55h

往位址555h寫90h

讀0位址得到廠家id: c2h

讀1位址得到裝置id: 22dah或225bh

退出讀id狀態: 給任意位址寫f0h

uboot怎麼操作?

2440的a1接到nor的a0,所以2440發出(555h<<1), nor才能收到555h這個位址,經過向左移位後

往位址aaah寫aah                      mw.w aaa aa

往位址554寫55h                       mw.w 554 55

往位址aaah寫90h                      mw.w aaa 90

讀0位址得到廠家id: c2h               md.w 0 1

讀2位址得到裝置id: 22dah或225bh      md.w 2 1

退出讀id狀態:                        mw.w 0 f0

3. nor有兩種規範, jedec(以前的舊版本,用乙個陣列儲存晶元的資訊), cfi(common flash inte***ce 晶元自身自帶的有)

讀取cfi資訊

nor手冊:   

進入cfi模式    往55h寫入98h

讀資料:        讀10h得到0051

讀11h得到0052

讀12h得到0059

讀27h得到容量

2440的a1接到nor的a0,所以2440發出(555h<<1), nor才能收到555h這個位址

uboot怎麼操作?

進入cfi模式    往aah寫入98h            mw.w aa 98

讀資料:        讀20h得到0051           md.w 20 1

讀22h得到0052           md.w 22 1

讀24h得到0059           md.w 24 1

讀4eh得到容量           md.w 4e 1

退出cfi模式             mw.w 0 f0

4. 寫資料: 在位址0x100000寫入0x1234

md.w 100000 1     // 得到ffff

mw.w 100000 1234

md.w 100000 1     // 還是ffff

2440的a1接到nor的a0,所以2440發出(555h<<1), nor才能收到555h這個位址

uboot怎麼操作?

往位址aaah寫aah               mw.w aaa aa

往位址554h寫55h               mw.w 554 55

往位址aaah寫a0h               mw.w aaa a0

往位址0x100000寫1234h         mw.w 100000 1234

5. 再次往0x100000寫入0x5678

因為原來0x100000上的資料不是0xffff,再次燒寫失敗

往位址aaah寫aah               

往位址554h寫55h               

往位址aaah寫a0h               

往位址0x100000寫5678h         mw.w 100000 5678

5.1 先擦除

mw.w aaa aa

mw.w 554 55

mw.w aaa 80

mw.w aaa aa

mw.w 554 55

mw.w 100000 30

5.2 再燒寫

mw.w aaa aa

mw.w 554 55

mw.w aaa a0

mw.w 100000 5678

Nor Flash操作程式

1 物理連線 am29lv160db的norflash 2 讀操作 讀操作不需要命令序列,缺省會進入讀取狀態 u16 read en29lv160ab u32 addr 3 獲取id define flash base 0x00000000 flash接到bank0上 define cmd addr...

作業系統IO硬體原理

i o 裝置及其介面線路 控制部件 通道和管理軟體。根據輸入輸出特性劃分 輸入型外圍裝置 輸出型外圍裝置和儲存型外圍裝置 按照輸入輸出資訊交換的單位劃分 字元裝置 輸入型外圍裝置和輸出型外圍裝置一般為字元裝置,它與記憶體進行資訊交換的單位是位元組,即一次交換 1 個或多個位元組 塊裝置 塊裝置一次與...

Linux 作業系統及硬體

記憶體的延遲分配 就是在你未使用記憶體 均指物理記憶體 的時候,作業系統是不會真正的分配物理記憶體的。比如 int p int malloc 1024 1024 如果接下來你沒有訪問p所指向的記憶體,那麼你會看到程序占用的記憶體是不是包括這1m空間的。因此不能通過檢測malloc的指標是否為null...