韦东山判断nor flash还是nand flash启动汇编代码解析

先贴代码:

        mov r1, #0
ldr r0, [r1] /* 读出原来的值备份 */
str r1, [r1] /* 0->[0] */
ldr r2, [r1] /* r2=[0] */
cmp r1, r2 /* r1==r2? 如果相等表示是NAND启动*/
ldr sp, =0x40000000+4096  /*先假设是nor启动*/
moveq sp, #4096     /*nand 启动*/
streq r0, [r1]      /*回复原来的值*/


判断nor flah还是nand flash启动的关键是:nor flash只可读、不可写。所以用nor flash启动,0地址就是nor flash 

0地址,所以代码的第3句往0地址写入0是无法实现的,0地址还是它原来的值。所以后面的判断不成立sp = 0x40000000+4096

而nand flash是将前4k内容copy到内存中,是可读可写,所以执行到第三局代码,0地址被写入0,判断成立。

你可能感兴趣的:(韦东山判断nor flash还是nand flash启动汇编代码解析)