NOR FLASH驅(qū)動(dòng)程序
// 參考 driversmtdmapsphysmap.c
//
#include "linux/module.h"
#include "linux/types.h"
#include "linux/kernel.h"
#include "linux/init.h"
#include "linux/slab.h"
#include "linux/device.h"
#include "linux/platform_device.h"
#include "linux/mtd/mtd.h"
#include "linux/mtd/map.h"
#include "linux/mtd/partitions.h"
#include "asm/io.h"
static struct map_info *s3c_nor_map;
static struct mtd_info *s3c_nor_mtd;
static struct mtd_partition s3c_nor_parts[] = {
};
static int s3c_nor_init(void)
{
}
static void s3c_nor_exit(void)
{
}
module_init(s3c_nor_init);
module_exit(s3c_nor_exit);
MODULE_LICENSE("GPL");
=============================================================
使用UBOOT體驗(yàn)NOR FLASH的操作(開(kāi)發(fā)板設(shè)為NOR啟動(dòng),進(jìn)入U(xiǎn)BOOT)
先使用OpenJTAG燒寫(xiě)UBOOT到NOR FLASH
1. 讀數(shù)據(jù)
md.b 0
2. 讀ID
NOR手冊(cè)上:
往地址555H寫(xiě)AAH
往地址2AAH寫(xiě)55H
往地址555H寫(xiě)90H
讀0地址得到廠家ID: C2H
讀1地址得到設(shè)備ID: 22DAH或225BH
退出讀ID狀態(tài): 給任意地址寫(xiě)F0H
2440的A1接到NOR的A0,所以2440發(fā)出(555h<<1), NOR才能收到555h這個(gè)地址
UBOOT怎么操作?
往地址AAAH寫(xiě)AAH mw.w aaa aa
往地址554寫(xiě)55H mw.w 554 55
往地址AAAH寫(xiě)90H mw.w aaa 90
讀0地址得到廠家ID: C2H md.w 0 1
讀2地址得到設(shè)備ID: 22DAH或225BH md.w 2 1
退出讀ID狀態(tài): mw.w 0 f0
3. NOR有兩種規(guī)范, jedec, cfi(common flash interface)
NOR手冊(cè):
進(jìn)入CFI模式 往55H寫(xiě)入98H
讀數(shù)據(jù): 讀10H得到0051
2440的A1接到NOR的A0,所以2440發(fā)出(555h<<1), NOR才能收到555h這個(gè)地址
UBOOT怎么操作?
進(jìn)入CFI模式 往AAH寫(xiě)入98H mw.w aa 98
讀數(shù)據(jù): 讀20H得到0051 md.w 20 1
4. 寫(xiě)數(shù)據(jù): 在地址0x100000寫(xiě)入0x1234
md.w 100000 1 // 得到ffff
mw.w 100000 1234
md.w 100000 1 // 還是ffff
NOR手冊(cè):
往地址555H寫(xiě)AAH
往地址2AAH寫(xiě)55H
往地址555H寫(xiě)A0H
往地址PA寫(xiě)PD
2440的A1接到NOR的A0,所以2440發(fā)出(555h<<1), NOR才能收到555h這個(gè)地址
UBOOT怎么操作?
往地址AAAH寫(xiě)AAH mw.w aaa aa
往地址554H寫(xiě)55H mw.w 554 55
往地址AAAH寫(xiě)A0H mw.w aaa a0
往地址0x100000寫(xiě)1234h mw.w 100000 1234
NOR FLASH驅(qū)動(dòng)程序框架
測(cè)試1:通過(guò)配置內(nèi)核支持NOR FLASH
1. make menuconfig
-> Device Drivers
2. make modules
3. 啟動(dòng)開(kāi)發(fā)板
測(cè)試2: 使用自己寫(xiě)的驅(qū)動(dòng)程序:
1. ls /dev/mtd*
2. insmod s3c_nor.ko
3. ls /dev/mtd*
4. 格式化:
5. mount -t jffs2 /dev/mtdblock1 /mnt //掛接的時(shí)候用塊設(shè)備mtdblock1
NOR FLASH識(shí)別過(guò)程:
do_map_probe("cfi_probe", s3c_nor_map);
do_map_probe("jedec_probe", s3c_nor_map);
評(píng)論