FlexSPI支持并行模式和单独模式
RT1052官方参考手册中,FlexSPI AHB方式的寻址地址是
当使用并行模式时,A1+B1并行,A2+B2并行,B端口控制无效,但是实际使用中,程序设置如下:
/*Get FLEXSPI default settings and configure the flexspi. */
FLEXSPI_GetDefaultConfig(&config);
/*Set AHB buffer size for reading data through AHB bus. */
config.ahbConfig.enableAHBPrefetch = true;
/*Allow AHB read start address do not follow the alignment requirement. */
config.ahbConfig.enableReadAddressOpt = true;
config.ahbConfig.enableAHBBufferable = true;
config.ahbConfig.enableAHBCachable = true;
/* enable diff clock and DQS */
// config.enableSckBDiffOpt = true;
config.rxSampleClock = kFLEXSPI_ReadSampleClkLoopbackFromDqsPad;
// config.rxSampleClock = kFLEXSPI_ReadSampleClkExternalInputFromDqsPad;
config.enableCombination = true;
config.enableSckFreeRunning = true;
config.enableSameConfigForAll = false;
FLEXSPI_Init(EXAMPLE_FLEXSPI, &config);
/* Configure flash settings according to serial flash feature. */
//A1+B1端口连接Flash
FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &norconfig, kFLEXSPI_PortA1);
FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &norconfig, kFLEXSPI_PortB1);
//A2+B2 端口连接FPGA
FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &deviceconfig, kFLEXSPI_PortA2);
FLEXSPI_SetFlashConfig(EXAMPLE_FLEXSPI, &deviceconfig, kFLEXSPI_PortB2);
norconfig 设置的空间大小是32M,deviceconfig设置的是64M,config.enableCombination = true; 联合模式使能。
但是实际测试中
访问 0x6000_0000~0x61FF_FFFF 地址时CSA_0有效;
访问0x6200_0000~0x65FF_FFFF 地址时CSA_1有效;
访问0x6600_0000~0x67FF_FFFF地址时CSB_0有效;
访问0x6800_0000~0x6BFF_FFFF地址时CSB_1有效;
似乎还是按照独立设置访问的地址空间,应该对手册描述理解有误?应该如何设置。
还有个问题,FlexSPI的8线并行和4线模式如何同时使用,器件结构体可以设置4个,但是FlexSPI配置结构体只有一个初始化函数,如果接口上连接的器件时序不同,应该如何修改FlexSPI接口配置。特别是DQS信号,如果访问不同器件,中途是不是需要重新初始化修改FlexSPI配置才可以使用。