在我的嵌入式目标中,NOR闪存在一些具有状态,设备信息,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]);
要切换到叠加模式,我必须预先录制somw写道:
ID (Autoselect) Entry 555 AA 2AA 55 555 90
(芯片是S29GL128S) 但是:
map[0x555]=0xAA;
map[0x2AA]=0x55;
map[0x555]=0x90;
不起作用。仍然读取正常内存而不是芯片ID。
用lseek读取/ dev / mem并读取返回0..so猜这样写的方式也不会起作用。
在这方面有点新手,并且欢迎所有帮助。
感谢
答案 0 :(得分:0)
为什么要使用强制转换为(int *)?变量map的类型是什么,int *? sizeof(int)== 4,因此map [0x555]表示在内存中映射[0x555 * 4字节]。使用强制转换为(unsigned char *)或(uint8_t)。
可能是错误就在那里。