硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3457|回复: 3
收起左侧

[SPI/QSPI] qspi开启cache的问题

[复制链接]

17

主题

101

回帖

152

积分

初级会员

积分
152
发表于 2020-11-10 11:43:20 | 显示全部楼层 |阅读模式
最近在研究qspi外设,然后按手册写了代码,轮训模式下都是正常的,然后使用mdma后,写正常,读出来都是0,移植了硬汉的之后又OK了,qspi是axi上的,所以ram是放在0x2400这边的,最后定位到是2400位置开启了cache,这个对读有什么影响嘛。关了就可以用了。

最后附上一个qspi的序列化模板函数,比较清晰明了对着手册填参就能用了
  1. void QSPI_SerializeCmd(QSPI_CommandTypeDef *sCommand,uint32_t Instruction,uint32_t AddressMode,uint32_t DataMode,uint32_t Address,uint32_t NbData)
  2. {
  3.         /*
  4.   sCommand.Instruction           指令数据          @0x0 - 0xFF
  5.   sCommand.Address               地址数据          @0x0 - 0xFFFFFFFF
  6.   sCommand.AlternateBytes        交替字节数据      @0x0 - 0xFFFFFFFF
  7.   sCommand.AddressSize           地址位数          @8/16/24/32
  8.   sCommand.AlternateBytesSize    交替字节位数      @8/16/24/32
  9.   sCommand.DummyCycles           空周期位数        @0 - 31
  10.   sCommand.InstructionMode       指令发送模式      @无/1/2/4线
  11.   sCommand.AddressMode           地址发送模式      @无/1/2/4线
  12.   sCommand.AlternateByteMode     交替字节发送模式  @无/1/2/4线
  13.   sCommand.DataMode              数据发送模式      @无/1/2/4线
  14.   sCommand.NbData                数据发送长度      @0x0 - 0xFFFFFFFF
  15.   sCommand.DdrMode               DDR模式           @使能/失能
  16.   sCommand.DdrHoldHalfCycle      延迟输出数据      @使能/失能
  17.   sCommand.SIOOMode              指令仅发送一次    @使能/失能
  18.   */
  19.   
  20.   /* 基本配置 */
  21.   sCommand->InstructionMode   = QSPI_INSTRUCTION_1_LINE;    /* 指令发送模式    :1线方式发送指令 */
  22.   sCommand->AddressMode       = AddressMode;                /* 地址发送模式    :无需地址 */
  23.   sCommand->AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;  /* 交替字节发送模式:无交替字节 */
  24.   sCommand->DummyCycles       = 0;                          /* 空周期位数      :0  */
  25.   sCommand->DataMode          = DataMode;                                      /* 数据发送模式    :无需数据 */
  26.   sCommand->DdrMode           = QSPI_DDR_MODE_DISABLE;      /* DDR模式         :W25Q256JV不支持DDR */
  27.   sCommand->DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;  /* 延迟输出数据    :DDR模式,数据输出延迟 */
  28.   sCommand->SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;   /* 指令仅发送一次  :每次传输都发指令 */
  29.   
  30.   /* 数据配置 */
  31.   sCommand->Instruction       = Instruction;  /* 写使能指令 */
  32.   sCommand->Address           = Address;
  33.   sCommand->AddressSize       = QSPI_ADDRESS_32_BITS;
  34.   sCommand->AlternateBytes    = 0x00000000;
  35.   sCommand->AlternateBytesSize= QSPI_ALTERNATE_BYTES_32_BITS;
  36.   sCommand->NbData            = NbData;

  37. }
复制代码




回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2020-11-10 12:23:39 | 显示全部楼层
1、配置AXI SRAM为WT
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitStruct.BaseAddress      = 0x24000000;
        MPU_InitStruct.Size             = MPU_REGION_SIZE_512KB;
        MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
        MPU_InitStruct.IsBufferable     = MPU_ACCESS_NOT_BUFFERABLE;
        MPU_InitStruct.IsCacheable      = MPU_ACCESS_CACHEABLE;
        MPU_InitStruct.IsShareable      = MPU_ACCESS_NOT_SHAREABLE;
        MPU_InitStruct.Number           = MPU_REGION_NUMBER0;
        MPU_InitStruct.TypeExtField     = MPU_TEX_LEVEL0;
        MPU_InitStruct.SubRegionDisable = 0x00;
        MPU_InitStruct.DisableExec      = MPU_INSTRUCTION_ACCESS_ENABLE;
        HAL_MPU_ConfigRegion(&MPU_InitStruct);

2、DMA读取后,调用函数SCB_CleanInvalidateDCache()。


如果你MPU配置为WB,那么DMA操作前和操作后,都要调用SCB_CleanInvalidateDCache()
回复

使用道具 举报

17

主题

101

回帖

152

积分

初级会员

积分
152
 楼主| 发表于 2020-11-10 14:08:39 | 显示全部楼层
eric2013 发表于 2020-11-10 12:23
1、配置AXI SRAM为WT
        MPU_InitStruct.Enable           = MPU_REGION_ENABLE;
        MPU_InitS ...

搜嘎,看来还是我cache不熟,我等会再去研究研究。多谢硬汉大佬
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107128
QQ
发表于 2020-11-11 08:18:10 | 显示全部楼层
初晴sama 发表于 2020-11-10 14:08
搜嘎,看来还是我cache不熟,我等会再去研究研究。多谢硬汉大佬

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-20 01:12 , Processed in 0.152534 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表