|
最近在研究qspi外设,然后按手册写了代码,轮训模式下都是正常的,然后使用mdma后,写正常,读出来都是0,移植了硬汉的之后又OK了,qspi是axi上的,所以ram是放在0x2400这边的,最后定位到是2400位置开启了cache,这个对读有什么影响嘛。关了就可以用了。
最后附上一个qspi的序列化模板函数,比较清晰明了对着手册填参就能用了
- void QSPI_SerializeCmd(QSPI_CommandTypeDef *sCommand,uint32_t Instruction,uint32_t AddressMode,uint32_t DataMode,uint32_t Address,uint32_t NbData)
- {
- /*
- sCommand.Instruction 指令数据 @0x0 - 0xFF
- sCommand.Address 地址数据 @0x0 - 0xFFFFFFFF
- sCommand.AlternateBytes 交替字节数据 @0x0 - 0xFFFFFFFF
- sCommand.AddressSize 地址位数 @8/16/24/32
- sCommand.AlternateBytesSize 交替字节位数 @8/16/24/32
- sCommand.DummyCycles 空周期位数 @0 - 31
- sCommand.InstructionMode 指令发送模式 @无/1/2/4线
- sCommand.AddressMode 地址发送模式 @无/1/2/4线
- sCommand.AlternateByteMode 交替字节发送模式 @无/1/2/4线
- sCommand.DataMode 数据发送模式 @无/1/2/4线
- sCommand.NbData 数据发送长度 @0x0 - 0xFFFFFFFF
- sCommand.DdrMode DDR模式 @使能/失能
- sCommand.DdrHoldHalfCycle 延迟输出数据 @使能/失能
- sCommand.SIOOMode 指令仅发送一次 @使能/失能
- */
-
- /* 基本配置 */
- sCommand->InstructionMode = QSPI_INSTRUCTION_1_LINE; /* 指令发送模式 :1线方式发送指令 */
- sCommand->AddressMode = AddressMode; /* 地址发送模式 :无需地址 */
- sCommand->AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE; /* 交替字节发送模式:无交替字节 */
- sCommand->DummyCycles = 0; /* 空周期位数 :0 */
- sCommand->DataMode = DataMode; /* 数据发送模式 :无需数据 */
- sCommand->DdrMode = QSPI_DDR_MODE_DISABLE; /* DDR模式 :W25Q256JV不支持DDR */
- sCommand->DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; /* 延迟输出数据 :DDR模式,数据输出延迟 */
- sCommand->SIOOMode = QSPI_SIOO_INST_EVERY_CMD; /* 指令仅发送一次 :每次传输都发指令 */
-
- /* 数据配置 */
- sCommand->Instruction = Instruction; /* 写使能指令 */
- sCommand->Address = Address;
- sCommand->AddressSize = QSPI_ADDRESS_32_BITS;
- sCommand->AlternateBytes = 0x00000000;
- sCommand->AlternateBytesSize= QSPI_ALTERNATE_BYTES_32_BITS;
- sCommand->NbData = NbData;
- }
复制代码
|
|