
lpc1788在外部ram调试总结.doc
11页1、MDK 设置1、Target图 12.Asm图 21 处必须预定义 NO_CRP,因为在 LPC1788 启动文件 startup_LPC177x_8x.s 中有如下代码图 3117-120 这段代码是 NXP 公司的 LPC1700 系列的 MCU 特有的一段代码,其他公司的 Cortex-M3 MCU 的启动程序是没有这段代码的这段代码是指定 LPC1700 的 CRP 加密级别的代码段,芯片上电后会自动读取 0x02FC 这一地址的值以确定加密方式,其中 CRP_Key = 0xffffffff 为 0 级加密,CRP_Key = 0x12345678 为 1 级加密,CRP_Key = 0x87654321 为 2 级加密,CRP_Key = 0x43218765 为 3 级加密(最高级加密),3 级加密将会禁止所有的 ISP 指令,也就是说,芯片将不能读写、不能擦除如果在图 2 中的 1 处没有定义了 NO_CRP,118-120 行代码会被执行,即定义 CRP_key,这会导致退出外部 RAM 调试时内核被锁,在 MDK 中的 Debug Setting 中无法检测到目标板;只能通过拉低 P2[10]引脚后通过 J_Flash 软件的 Target->Connect 连接目标板,然后 Erase Chip 擦除目标板 Flash,这样才能在 Debug Setting 中重新检测到目标板3.Linker图 41)、如果图 2 中 1 处(使用 Target 对话框中的内存布局)打勾,则表示使用默认的分散加载文件生成映像文件,其内容为图 5其中图 3 中的地址 1 对应于 Target 对话框中 Read/Only Memory Areas 区内的默认存储空间的起始地址,默认为片内 Flash;地址 2 是对应于 arget 对话框中 Read/Write Memory Areas 区内的默认存储空间的起始地址,默认为片内 SRAM。
如果此时图 1Target 对话框中的 Read/Only Memory Areas 和 Read/Write Memory Areas 区域的存储空间设置的不是默认值,则会出现编译错误Link Control String 中的内容为(工程名为 Proj1)图 62)、如果图 2 中 1 处不打勾,并在 3 处选择了分散加载文件,则会按分散加载文件中的内容生成映像文件;此时 Target 对话框中指定的 RO 和 RW 存储空间无效这次调试使用的分散加载文件内容为图 7将向量表和所有必须在 root region 中的 library sections(如__main.o, __scatter*.o, __dc*.o, 和Region$$Table)放在起始地址为 0x10000000,大小为 0x10000 的存储空间中(片内 SRAM)中;将剩余的代码,读写数据和零初始化数据放大起始地址为 0xA0000000,大小为 0x1000000 的存储空间(片外 SDRAM)中Link Control String 中的内容如图 2 ,分散加载文件名为 SDRAM.sct3)、如果图 2 中 1 处不打勾,且 3 处没有选择分散加载文件,则会按 2 处的 R/O Base 和R/W Base 生成映像文件;此时 Target 对话框中指定的 RO 和 RW 存储空间无效。
Link Control String 中的内容为(R/O Base 和 R/W Base 如图 2)图 83、Debug图 9Load Application at Startup 处不要打勾,在 1 处选择初始化命令脚本,内容为10-22 行的关于 MPU 的设置一定要有,否则程序在 SDRAM 中的执行会出现错误,这是因为 Cortex_M3处理器在 0xA0000000-0xDFFFFFFF 之间的存储空间的默认访问属性是不可执行的,是不可执行区,图中第 16行代码通过设置 MPU region 属性及容量寄存器 MPURASR,使其以 0xA0000000 为起始地址的32MB(MPURASR[5:1]=0b11000)存储空间为共享内存(MPURASR[26:24]=0b011),且此区允许取指(MPURASR[28]=0)InitSDRAM()函数在 MT48LC8M32LFB5.ini 中,作用为初始化外部 SDRAM,其内容为4、Utilities1 处不能打勾,这个选项的意思是在进入调试前先更新目标板,但是我们并没有配置目标板的flash,所以这个选项如果不去掉,在调试时就会弹出错误,大意是在 xxxx 地址没有找到算法。
5、Utilities Setting因为是在外部 RAM 中调试,所以 1 中不用加载 Flash 编程算法,左上角选择 Erase Sectors 或 Do not Erase 都可以2、问题总结1、在外部 RAM 中调试,程序中不要有操作外部 RAM 的代码,初始化也不要有,包括对 RAM 相关引脚的操作,RAM 的初始化和引脚的初始化要放到 jlink 的下载配置文件 MT48LC8M32LFB5.ini 中,主要是对 LPC 的寄存器进行相关配置2、在 system_LPC177x_8x.c 的 SystemInit()函数中如图 183-188 行关于时钟选择设置部分要注释掉,因为 LPC1788 复位后是以 IRC 作为时钟源的,当将程序下载到外部 RAM 中时,外部 RAM是在 12MHz 的 IRC 下运行的,所以更改 CPU 或 EMC 时钟会使程序在外部 RAM 运行出错3、步骤1)、Target 或 Linker2)、Asm (LPC1788 特有)3)、Debug4)、Utilities。












