" *(volatile unsigned short *)(FM_START_ADDR + 0x555)=0xaaaa"
这个对flash的写操作的地址不对,请查看s3c4510的手册和flash手册,S3C4510会根据外部地址总线的宽度,CPU的内部地址总线需要一个转换。
的确是这样,我把地址搞错了。
应该是0x555<<1=0xAAA。
但是程序运行还是有问题:
现在只能执行第一个fm_write(),然后就死机了。
void send_unlock(){ fm_write(FM_ADDR_UNLOCK1,FM_DATA_UNLOCK1); dbg("1st unlock\n"); fm_write(FM_ADDR_UNLOCK2,FM_DATA_UNLOCK2); dbg("2nd unlock\n");}
执行完后只显示 1s 就死机了 :(
fm_write是这样定义的
#define fm_write(addr, data) VPshort(FM_START_ADDR + addr) = data
FM_ADDR_UNLOCK1=0xAAA
FM_ADDR_UNLOCK2=0x555