我先说明一下情况哈:
我现在是用AT91RM9200读取挂接的一个28F128J3D的norflash 大小为16M,物理地址从0x1000 0000开始
[/size]
[size=4]现在在驱动程序下对读书flash的数据进行测试:代码如下所示:
#define BASE_FLASH (( unsigned long) 0x10640000)
static int __init eth_init(void)
{
volatile unsigned int data;
void * flash_add;
int i;
request_mem_region(BASE_FLASH, 0x18, "flash");
flash_add = ioremap(BASE_FLASH, 0x18);
for(i = 0; i < 12; i++) {
iowrite16(WORD_PROGRAM_COMMAND, flash_add);
iowrite16(0x1234, flash_add + 0x2 * i);
iowrite16(READ_ARRAY_COMMAND,flash_add);
data = ioread16(flash_add + 0x2 * i);
printk("data = %d\n", data);
}
printk("init module\n");
return 0;
}
[/size]
[size=4]现在出现的问题是:
1、如果连续的写flash 只能写两个字节也就是iowrite16()函数只执行了一次;
2、如果在iowrite16()以后执行ioread16()则可以全部写对;
3、用ioread16()读取的数据不对,都是127;
----------------------------------------------------------------------------------------------------------