非常感谢两位高手的指点,使我明白了很多。
但俺还有不明白之处需要向两位高手请教。比如,EEWORLD给的例子程序中的flash.cmd文件一般为:
MEMORY
{
PAGE 0 :
OTP : origin = 0x3D7800, length = 0x000800
FLASHJ : origin = 0x3D8000, length = 0x002000
FLASHI : origin = 0x3DA000, length = 0x002000
FLASHH : origin = 0x3DC000, length = 0x004000
FLASHG : origin = 0x3E0000, length = 0x004000
FLASHF : origin = 0x3E4000, length = 0x004000
FLASHE : origin = 0x3E8000, length = 0x004000
FLASHD : origin = 0x3EC000, length = 0x004000
FLASHC : origin = 0x3F0000, length = 0x004000
FLASHB : origin = 0x3F4000, length = 0x002000
FLASHA : origin = 0x3F6000, length = 0x001FF0
BEGIN : origin = 0x3F7FF6, length = 0x000002
PASSWDS : origin = 0x3F7FF8, length = 0x000008
ROM : origin = 0x3FF000, length = 0x000FC0
VECTORS : origin = 0x3FFFC2, length = 0x00003E
PAGE 1 :
/* SARAM */
RAMM0M1 : origin = 0x000000, length = 0x000800
/* Peripheral Frame 0: */
DEV_EMU : origin = 0x000880, length = 0x000180
FLASH_REGS : origin = 0x000A80, length = 0x000060
CSM : origin = 0x000AE0, length = 0x000010
XINTF : origin = 0x000B20, length = 0x000020
CPU_TIMER0 : origin = 0x000C00, length = 0x000008
CPU_TIMER1 : origin = 0x000C08, length = 0x000008
CPU_TIMER2 : origin = 0x000C10, length = 0x000008
PIE_CTRL : origin = 0x000CE0, length = 0x000020
PIE_VECT : origin = 0x000D00, length = 0x000100
.
.
.
上述文件中PAGE 0 (程序存储器)定义的PASSWDS存储空间为存放锁flash的密码空间,
而PAGE 1 (数据存储器)中定义的CSM存储空间为设置锁和解锁flash的钥匙(也既是烧写
插件中的key0~key7)。
俺的不明白之处在于如果我定义把程序代码存放在 FLASHA 存储空间,但由于代码很大,可能会超出
FLASHA 存储空间,由于代码连续存放,它会不会跑到 PASSWDS 存储空间而覆盖掉PASSWDS,这样的话
不就相当于对flash加密上锁吗?而这密码自己也不知使啥,所以锁死flash。
对于CSM存储空间也一样,要是把代码放在与CSM 存储空间相邻的存储空间,会不会因代码过大而覆盖
掉CSM 存储空间,这样的话也不相当于给flash加密了吗?
俺是真的不明白,上次稀里糊涂的给锁死了一块芯片,害得花了几百,现在不太明白还是不敢烧写
flash,连动都不敢动。
请高手指点指点啊,不胜感谢!!!
呵呵,如果程序能到达PASSWORD(0x3f7ff8),那么它必然经过0x3f7ff6........它可是个跳转点!