SPI Master boot mode
外挂一颗16Mbytes的SPI FLASH,设置boot mode为SPI Master boot mode:
CS和MISO信号需要上拉到VDD,SCK下拉到地。
SYS_BMODE1/2/3脚根据上图配置,选择SPI2 master模式。
boot检测
上电后,DSP会尝试发送SPIX_MOSI数据,LDR文件默认首字节(BCODE)为1,因此一旦读取到1,就可以自动检测地址长度是24bits还是32bits,这里我们使用GD25Q127芯片,16Mbytes,地址是24bits,因此到第5个字节就能收到1。
如果SPI FLASH型号不一样,甚至要提高速度,比如采用DUAL MODE,或者QUAD MODE,那需要将BCODE做对应的修改。
下图是GD25Q127的操作命令,可以和BCODE吻合。
Boot block
LDR文件都是采用如下格式组成。
每个block包含4部分,总共16bytes,每部分4bytes。
- Block code 每个位段不同含义,0-3位就是BCODE的值
- Target address 目标地址,必须能被4整除,方便DMA操作
- Byte count 字节数,必须能被4整除
- Argument field 参数
LDAR文件包含一个BFLAG_FIRST段,包含一个BFLAG_FINAL段。
BFLAG_FIRST段中Target address为程序的入口地址。
当内置boot读取完毕BFLAG_FINA段之后,就会跳到BFLAG_FIRST段中Target address地址开始运行程序。
综上,总共有以下几个block types:
- Normal Block
- First Block
- Final Block
- Indirect Block
- Ignore Block
- Fill Block
- Init Block
- Callback Block
- Save Block
当然最简单的boot stream当属 sigle block模式,加上First block和Final block就3个block。
启动的时候还可以通过CRC32来校验数据的完整性,可以在开始加入init block,然后TARGET ADDRESS指向adi_rom_Crc32Init() ROM函数,ARGUMENT填写CRC32的多项式,一旦这个block被执行,后续所有的block(除了ignore和first)的payload都会使用CRC32来校验