S3C2440 nor flash驅動程式

2021-08-27 18:59:48 字數 4191 閱讀 1510

20150418 s3c2440 nor_flash驅動程式

2015-04-18 lover雪兒

和前面的nandflash差不多,我們此處來重新學習一下norflash驅動。

1/*2

* 參考 drivers\mtd\maps\physmap.c3*/

45 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18

19//

定義nor flash的分割槽

20static

struct mtd_partition lhy_nor_part =,

26 [1] =,

31};

3233

static

struct map_info *lhy_nor_map;

34static

struct mtd_info *lhy_nor_mtd; //

動態建立

3536

static

int lhy_nor_init(void)37

57if(!lhy_nor_mtd)

6263

/*4.新增分割槽: add_mtd_partitions

*/64 add_mtd_partitions(lhy_nor_mtd,lhy_nor_part,2); //

總共兩個分割槽

65return0;

66}6768

static

void lhy_nor_exit(void)69

75}7677

module_init(lhy_nor_init);

78module_exit(lhy_nor_exit);

79 module_license("

gpl"

);80

81/*

8283

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

84使用openjtag燒寫u-boot到nor flash

851.讀資料

86md.b 0

8788

2.讀id

89往位址555h寫入aah

90往位址2aah寫入55h

91往位址555h寫入90h

92讀0位址得到廠家id c2h

93讀1位址得到裝置id 22dah/225dh

94退出讀id狀態 往任意位址寫入f0h

9596

由於2440的cpu的資料線和nor的資料線相錯開,所以uboot操作時,寫的位址應該<<1得到

97往位址aaah寫入aah mw.w aaa aa

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

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

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

101讀2位址得到裝置id 22dah/225dh md.w 2 1

102退出讀id狀態 往任意位址寫入f0h mw.w 0 f0

103104

3.nor 手冊上有兩種規範,jedec,cfi(common flash inte***ce)

105讀取cfi資訊

106進入cfi模式,往位址55h寫入98h

107讀資料: 讀10h得到0051

108讀11h得到0052

109讀12h得到0059

110讀27h得到容量

111uboot操作時,寫的位址應該左移一位

112進入cfi模式,往位址aah寫入98h mw.w aa 98

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

114讀22h得到0052 md.w 22 1

115讀24h得到0059 md.w 24 1

116讀4eh得到容量 md.w 4e 1 2^n

117退出cfi模式,往任意位址寫入f0h mw.w 0 f0

1184.寫資料 在位址0x100000寫入0x1234 發現無法寫資料

119往位址555h寫入aah

120往位址2aah寫入55h

121往位址555h寫入a0h

122往燒寫位址寫入要寫的資料

123124

u-boot操作

125往位址aaah寫入aah mw.w aaa aa

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

127往位址aaah寫入a0h mw.w aaa a0h

128往燒寫位址寫入要寫的資料 mw.w 100000 1234h 往1m的位址寫資料

129130

1315.測試核心自帶的驅動程式:

1321).通過配置核心支援nor flash

133--> device drivers

134--> memory technology device (mtd) support

135136

cfi flash device in physical memory map

137138

139(2) bank owidth in octets //位寬為16位

1402).make modules

141cp drivers/mtd/maps/physmap.ko /home/study/nfs_home

142143

1446.寫驅動程式

145①分配

146②設定

147③使用

148驅動程式框架:

149150

7.測試 使用自己寫的驅動程式

1512.儲存以前的根檔案系統的bootargs

152nfs 30000000 192.168.1.5:/work/nfs_root/uimage_nonand

153set bootargs console=ttysac0 root=/dev/nfs nfsroot=192.168.1.105:/work/nfs_root/first_fs ip=192.168.1.17:192.168.1.5:192.168.1.1:255.255.255.0::eth0:off

154155

ls /dev/mtd*

156insmod lhy_nor.ko

157ls /dev/mtd*

158格式化: flash_eraseall -j /dev/mtd1 ;格式化為jffs2檔案系統(一般nand(yaffs),nor(jffs2))

159160

掛接: mount -t jffs2 /dev/mtdblock1 /mnt ;格式化時用字元裝置,掛接時用塊裝置

161在裡面增加檔案,重啟之後,看看檔案是否還在

162insmod lhy_nor.ko

163ls /dev/mtd*

164mount -t jffs2 /dev/mtdblock1 /mnt ;讀檔案

165166

1678.協議層追蹤

168lhy_nor_mtd = do_map_probe("cfi_probe",lhy_nor_map);

169lhy_nor_mtd = do_map_probe("jedec_probe",lhy_nor_map);

170171

172*/

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...

s3c2440系統時鐘

1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...

s3c2440儲存控制

nandflash和norflash都是flash的一種,都是散存,都是磁碟儲存介子,但是nandflash一般比較大,而norflash都比較小,並且norflash比較貴,並且norflash寫的速度比較慢,但讀的速度比較快 而nandflash讀的速度比較慢,寫的速度比較快。nor flash...