Micro2008Chen 发表于 2018-9-27 13:06:17

1052,代码运行在sdram,AHB方式读取qspi器件,系统会异常

相同的代码,AHB方式读取QSPI Flash数据,启动方式不一样,分别是从sd卡启动和QSPI启动,但最终都是加载到sdram中运行的。SD卡启动时,任何操作程序正常;
QSPI启动,读取qspi的数据会产生死机,IP操作qspi正常。

启动时xip flash配置:
const flexspi_nor_config_t spiflash_config = {
    .memConfig =
      {
            .tag = FLEXSPI_CFG_BLK_TAG,/*标志:FCFB*/
            .version = FLEXSPI_CFG_BLK_VERSION,/*版本:V1.4.0*/
            .readSampleClkSrc = kFlexSPIReadSampleClk_LoopbackInternally,/*内部环回*/
            .csHoldTime = 3u, /*保持时间*/
            .csSetupTime = 3u,/*建立时间*/
            .columnAddressWidth = 0u,/*列地址宽度*/
            .deviceModeCfgEnable = 1u,/*设备模式配置使能*/
            .deviceModeType = 1u,/*Quad 使能命令*/
            .deviceModeSeq.seqNum = 1u,/*LUT序列号*/
            .deviceModeSeq.seqId = 4u, /*LUT序列索引*/   
            .deviceModeArg = 0x000200,/*设置 QE=1(S9)*/
            .deviceType = kFlexSpiDeviceType_SerialNOR,/*设备类型为nor flash*/
            .sflashPadType = kSerialFlash_4Pads,/*设备数据总线为4*/
            .serialClkFreq = kFlexSpiSerialClk_100MHz,/*flash 时钟*/
            .sflashA1Size = 16u * 1024u * 1024u,      /*flash 大小32MBytes*/
            //.dataValidTime = {16u, 16u},
            .lookupTable =
                {
                  /*快速读命令(四线)*/
                     = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x6B, RADDR_SDR, FLEXSPI_4PAD, 0x18),
                     = FLEXSPI_LUT_SEQ(DUMMY_SDR, FLEXSPI_4PAD, 0x06, READ_SDR, FLEXSPI_4PAD, 0x04),
                  

                  /*读状态命令*/
                     = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x05, READ_SDR, FLEXSPI_1PAD, 0x04),
                  /*写使能命令*/
                     = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x06, STOP, FLEXSPI_1PAD, 0),      
                  /*擦除扇区命令*/
                     = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x20, RADDR_SDR, FLEXSPI_1PAD, 0x04),
                  /*页编程命令(四线)*/
                     = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0x32, RADDR_SDR, FLEXSPI_1PAD, 0x18),
                   = FLEXSPI_LUT_SEQ(WRITE_SDR,FLEXSPI_4PAD , 0x04, STOP, FLEXSPI_1PAD, 0),                  
                  /*整片擦除*/
                  = FLEXSPI_LUT_SEQ(CMD_SDR, FLEXSPI_1PAD, 0xc7, STOP, FLEXSPI_1PAD, 0),                  
                },
      },
    .pageSize = 256u,/*页大小为256字节*/
    .sectorSize = 4u * 1024u,/*扇区大小为4k字节*/
};

程序中重新对flexspi 进行初始化:
        FLEXSPI_GetDefaultConfig(&config);       
        config.ahbConfig.enableAHBPrefetch = true;// 允许AHB预读取的功能        
        FLEXSPI_Init(base, &config);// 写入配置

        // 根据串行闪存功能配置闪存设置
        FLEXSPI_SetFlashConfig(base, &deviceconfig, kFLEXSPI_PortA1);       
        udelay(10);

        // 更新查找表
        FLEXSPI_UpdateLUT(base, 0, &customLUT_24bit, 64);


哪位大侠知道原因么?
页: [1]
查看完整版本: 1052,代码运行在sdram,AHB方式读取qspi器件,系统会异常