在我的嵌入式目标中,NOR flash 在一些带有状态、设备信息、cfi 信息等的命令后覆盖地址映射。
读取我使用的普通地址:
map= (int *)(mmap(0,SECTOR_SIZE*NUM_SECTORS,PROT_READ|PROT_WRITE,MAP_SHARED,_fdmem,NOR_FLASH_PHYS));
printf("Location 0x0 , data %x\n",map[0]);
要切换到覆盖模式,我必须执行一些写入操作:
ID (Autoselect) Entry 555 AA 2AA 55 555 90
(芯片为S29GL128S) 但是:
map[0x555]=0xAA;
map[0x2AA]=0x55;
map[0x555]=0x90;
不起作用。仍然读取普通内存而不是芯片id。
使用
lseek
和 read
读取 /dev/mem 返回 0..所以猜测这种方式也行不通。
这个领域的新手,所以欢迎所有帮助。
谢谢
为什么使用强制转换为 (int *)?变量映射的类型是什么,int*? sizeof(int) == 4,所以map[0x555]表示内存中的map[0x555*4 bytes]。使用转换为 (unsigned char *) 或 (uint8_t)。
可能是某个地方出现了错误。