来自恩智浦的工程师 的答复:
1、地址空间的冲突是怎样解决的
m4/m0核芯,使用手册上对存储区划分只有一个表和一些说明,没有对两个内核进行虚拟映射,这样的话存储器或者外设对于m0和m4来说地址应该是一样的;查了m0/M4的技术手册上面,内核部分的各寄存器地址是一样的,在LPC4357的同一地址空间上是怎么实现不冲突的?
ð 除了NVIC, SCB (0xE0000000开始的地址)是每个内核有自己的外,芯片上的公共资源有相同的地址空间
2.启动问题
对于M核,nivc向量表是很重要的,这点大家都明白,从一上电就要用到它。 由于4357的地址0是被映射的,对于m4上电时bootRoom区映射到地址0,猜测bootRoom起始位置应该有nvic向量表,=> 是的,虽然手册上没说。
bootROM引导程序结束后,将0x1000 0000(就是SRAM映射到地址0),此后程序何去何从手册上也没讲。显然bootROM中的程序要在0x10000000处建立一张向量表的。=> 是的。
3、程序的编译和烧录问题
M4和M0的指令集显然是不同的,用mdk编译的程序是如何区分m0、m4的,又是如何分别烧录到片内flash,或者片外flash的。
=》一般是把M0的image转换成C语言数组(MDK的自带了映像转换工具fromelf),再加到M4工程里,在烧写M4映射的时候一同把M0的映像烧入
对于m0,可以由m4来设置它的影子寄存器和NVIC然后再启动它,但这至少需要m0的程序在地址空间中的地址吧,这个又是如何解决的??
=>M4负责装载M0的映像(如果M0映像在RAM的话);如果M0从Flash执行,最好在烧写时就到最终的位置,否则需要M4调用IAP
另外,只使用片外nor flash执行程序是如何烧录进去的,执行时又是如何由bootROM引导的?=> 需要每系列器件提供编程算法,或者用并行离线编程器烧写。引导方式使用EMC并行引导方式,总线宽度与器件的相同(8/16)