SWM181芯片结构如下: SWM181本身(die,晶粒)没有Flash,而是在同一个封装内叠封了一个120KB的SPI Flash,SWM181通过专用的SPI接口对此SPI Flash读写。
SWM181的程序执行模式可以分为两种:CodeRAM执行,Cache执行。
CodeRAM执行 将片内SRAM分成两块,8KB Data RAM、24KB Code RAM,上电时BootLoader将SPI Flash的低24KB拷贝到Code RAM,程序在Code RAM上执行。
这种模式下,如果程序大于24KB,需要用户代码将超出的部分拷贝到Data RAM中,但由于片内SRAM共有32KB,因此程序大小无论如何无法超过32KB。
Cache执行 Cache执行模式类似于电脑CPU或嵌入式处理器中的Cache执行方式。 CPU从Cache中读取指令,如果Cache发现CPU要的指令不在Cache中,就自动从SPI Flash中读取该指令,并缓存在Cache中,下次CPU再次读取该指令时可立即给出,不必再读取SPI Flash。 当整个Cache被指令占满时,Cache会将最不常用的指令占用的Cache Line释放,从而可以从SPI Flash读取新的指令。
这种方式理论上可以支持任意大小的程序(几百KB甚至几MB),但发生指令不在Cache中(即Cache miss)时,会降低程序的响应实时性,因此建议将中断处理函数(以及ISR调用的函数)放入Data RAM中。
模式选择 startup_SWM181.s 文件中: Note:模式0和1只是Cache大小的区别;如果所需Data RAM不超过16KB,建议使用模式0,更大的Cache可减小Cache Miss,提升程序速度。
为什么UserBoot下APP必须放在Flash起始地址? 基于RAM执行的时候,,代码不能超过24KB,,因为CodeRAM就是24KB,,多了装不下。。但是代码可以在SPI Flash的任意位置,,因为无论在哪里都是拷贝到CodeRAM里面去执行 基于Cache执行,,代码可以和SPI Flash一样大,,但因为Cache固定将程序地址空间的0地址映射到SPI Flash的0地址,,因此基于Cache执行的代码只能在SPI Flash的0地址,, APP一般都大于24KB,,因此必须放在Flash起始地址处。。
|