flash芯片替换SAMSUNG K9K8G08U0E替换K9K8G08U0B
首先拜謝一下這幾位作者
具體解決辦法
http://www.61ic.com/Article/DaVinci/TMS320DM3x/201307/49496.html
遇到類似問題?K9K8G08U0E替換K9K8G08U0B的blog
http://blog.csdn.net/daidi1989/article/details/32335331
如何編寫linux下nand flash驅動(具體講解)
http://www.crifan.com/files/doc/docbook/linux_nand_driver/release/html/linux_nand_driver.html#nand_flash_page
本文主要講述flash的替換SAMSUNG K9K8G08U0E替換K9K8G08U0B中遇到的問題
一、出現的問題
主要是兩點
1.boot能夠燒入,但是kernel,rootfs燒不進去,使用nand read/write 會報-74錯,校驗錯誤
2.使用ubi文件系統,同樣會報錯
UBI error: ubi_io_read: error -74 while reading 64 bytes from PEB 0:0, read 64 bytes
二、解決辦法
下面說一下解決辦法
我的u-boot版本:u-boot-2009.11-rc1
linux kernel版本:2.6.29.6
前面改法作廢。
?
1.????代碼修改
?
u-boot,kernel都需要改,改法相同,如下:
?
/drivers/mtd/nand/nand_base.c???修改函數nand_get_flash_type
?
???????/* Get chip options, preserve non chip based options */
???????chip->options &= ~NAND_CHIPOPTIONS_MSK;
?
???????/*Add by zhangjj 2015-8-6*/
????????chip->options |= NAND_NO_SUBPAGE_WRITE; ??????/*close subpage write mode to compatibale K9K8G08U0B with K9K8G08U0E*/
???????/*add end*/
???????chip->options |= type->options & NAND_CHIPOPTIONS_MSK;
?
2.????修改mkfs.ubifs ?-e參數
?
例如:
mkfs.ubifs -r ./bin -m 2048 -e 129024 -c 300 -o kernel.img
改為:
mkfs.ubifs -r ./bin -m 2048 -e 126976 -c 300 -o kernel.img
?
說明:
第1步是將小頁模式關閉,使同時兼容兩種芯片
第2步是因為大頁模式下,UBI可擦除邏輯塊大小少了2個page(2048),(64-2)*2KiB=124KiB
?K9K8G08U0D應該是與?K9K8G08U0B差不多,所以改法應該一樣
三、問題解決過程
1.原廠咨詢
? ? ? 1)?新芯片不支持小頁模式寫入,驅動里面的讀寫方式需要修改
(老芯片一個塊為2048,可以分多次寫入,新芯片一個塊為2048+64,只能一次寫入)
? ? ? 2)?Device id不同
2.通過對比datasheet,兩flash的功能塊表和 陣列組織相同,如下
3.繼續對比手冊,如下不同:
4.Program/Erase Characteristics Nop有差異
對比參考上面鏈接
三星原廠就K9K8G08U0D升級為K9K8G08U0E的回信:
?1.?please?check?the?below?timing?first.
K9F1G08U0E?vs?K9F1G08U0D?Timing?difference
tR tPROG tBERS NOP
K9F1G08U0E Max.?40us Max.?900us Max.?16ms 1
K9F1G08U0D Max.?40us Max.?750us Max.?10ms 4
?
2.?if?timing?is?OK,?please?kindly?know?the?21nm?SLC?NOP=1?,?not?4
????it?means?every?NAND?page?you?can?just??write?one?time,
?????if?you?want?to?write?the?data?in?the?same?page?again,?you?need?to?erase?first
?
3.?please?note?:?
???due?to?21nm?SLC?NOP=1,?it?means?you?can?not?use?"Partial?Program"??for?it
???if?you?use?this?function?in?our?42?nm?SLC?and?want?to?change?to?21nm?SLC
????the?way?to?solve?it?is?modify?host?FTL?algorithm?
?????
?there?is?FTL?(flash?transfer?layer)?between?file-system?and?raw?NAND
?(?FTL?:?flash?transfer?layer?;?such?as?bad?blocks,?page?size?write?/read,?ECC?,?wearleveling.....)
?in?solution?base?such?as?eMMC?or?SSD,?the?inside?controller?handle?FTL
?but?for?Raw?NAND,?it?has?NO?controller?inside?and?needs?host?to?handle?this?algorithm?
?
4.???image-partition?FAT?table?error
?????please?kindly?check?the?physcial?to?logical?table
?????in?logical,?you?can?write?the?data?in?the?same?area
?????but,?in?physical,?when?you?want?to?write?or?update?the?new?data?to?the?same?page
?????you?can?not?write?directly?in?the?same?page?due?to?NOP=1
?????you?need?to?write?to?another?page ?
總共就這幾點差異,1.讀寫的時鐘,2.nop差異導致小頁模式失效(這一點與當初技術支持的溝通相同)
關于時鐘,網上大神修改過,還是不行,基本就定位在第二點
相對于以前版本0D版本來說,時序變寬, NOP由以前的4個變成一個NOP,好像是512的子頁操作取消了: 以前的一個頁面可以分成4個子頁來寫,每個子頁就是512,但是U0E的NOP是1,所以應該說就不支持子頁操作了。 ?關于子頁操作
后來遇到這篇文章:http://www.61ic.com/Article/DaVinci/TMS320DM3x/201307/49496.html
按照他的步驟以及nand操作過程http://www.cnblogs.com/dyllove98/archive/2013/07/16/3194139.html
修改后已基本跑起來了,中間遇到需要調整ubi的問題,將在《ubi問題匯總》進行總結。
具體步驟參照如下鏈接
http://blog.csdn.net/davion_zhang/article/details/47400419
總結
以上是生活随笔為你收集整理的flash芯片替换SAMSUNG K9K8G08U0E替换K9K8G08U0B的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab上能仿真功率吗,基于MATL
- 下一篇: 计算机体系结构(复习资料)