[STM32L4] 基于STM32L476+64M QSPI接口PSRAM(IPS6404L)开源分享(含源码)

[复制链接]
13152|89
 楼主| mmuuss586 发表于 2019-7-21 10:06 | 显示全部楼层
自己支持下,谢楼上支持!
 楼主| mmuuss586 发表于 2019-7-27 20:36 | 显示全部楼层
谢楼上支持;
自己支持下
mouse 发表于 2019-8-1 20:44 | 显示全部楼层
本帖最后由 mouse 于 2019-8-6 11:26 编辑

楼主好!
我在smt32f446re 单片机上使用IPS6404时碰到问题,QSPI只支持2 LINE 方式,没有4 LINE,所以将QSPI设置工作在1 LINE模式,现在能正常读写IPS6404数据,但是有个问题,在连续读数据的时候,中间会有停顿。例如:读50字节,读到4微秒左右时,会停顿2us左右,然出来4个字节,再停顿2us,再出来4字节,再停顿2us , 如此循环。不知道什么原因导致的。

单片机主时钟180Mhz,IPS6404 clock为90Mhz。
代码参照楼主发的代码,连续读函数如下:
App_StatusStructType QSPI_PSRAM_ReadPage(QSPI_HandleTypeDef *hQspi,uint8_t *pData,uint32_t FirstAddr, uint32_t BufSize)
{
  QSPI_CommandTypeDef sCommand;

  /* Reading Sequence ------------------------------------------------ */
  sCommand.Instruction       = FAST_READ_CMD;        //0x0B
  sCommand.InstructionMode   = QSPI_INSTRUCTION_1_LINE;
  sCommand.AddressMode       = QSPI_ADDRESS_1_LINE;          //
  sCommand.AddressSize       = QSPI_ADDRESS_24_BITS;
  sCommand.Address           = FirstAddr;
  sCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
  sCommand.DataMode          = QSPI_DATA_1_LINE;
  sCommand.NbData            = BufSize;                               //ID Size
  sCommand.DummyCycles       = DUMMY_CLOCK_CYCLES_READ;
  sCommand.DdrMode           = QSPI_DDR_MODE_DISABLE;
  sCommand.DdrHoldHalfCycle  = QSPI_DDR_HHC_ANALOG_DELAY;
  sCommand.SIOOMode          = QSPI_SIOO_INST_EVERY_CMD;

  if (HAL_QSPI_Command(hQspi, &sCommand, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    return ERROR_QSPI_PSRAM_READ;
  }

  if (HAL_QSPI_Receive(hQspi, pData, HAL_QPSI_TIMEOUT_DEFAULT_VALUE) != HAL_OK)
  {
    return ERROR_QSPI_PSRAM_READ;
  }

  return OK;
}

QSPI初始:
void MX_QUADSPI_Init(void)
{

  hqspi.Instance = QUADSPI;
  hqspi.Init.ClockPrescaler = 2-1;
  hqspi.Init.FifoThreshold = 4;
  hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
  hqspi.Init.FlashSize = 23-1;
  hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_2_CYCLE;
  hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
  hqspi.Init.FlashID = QSPI_FLASH_ID_1;
  hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
  if (HAL_QSPI_Init(&hqspi) != HAL_OK)
  {
    Error_Handler();
  }

}

抓取的波形,黄色是clock,另一颜色是CS (请忽略CS信号中的低电平的示波器串扰,单独量CS信号是没问题的)。
微信图片_20190801203241.jpg

谢谢!
mouse 发表于 2019-8-5 17:38 | 显示全部楼层
本帖最后由 mouse 于 2019-8-6 11:21 编辑
mouse 发表于 2019-8-1 20:44
楼主好!
我在smt32f446re 单片机上使用IPS6404时碰到问题,QSPI只支持2 LINE 方式,没有4 LINE,所以将QSP ...

改用DMA方式接收,中间就不会有停顿了。
没搞明白不用dma为什么不行,代码没做其他事情,就只做QSPI读取。猜测HAL_QSPI_Receive在什么时候死等太久了,没去仔细查什么原因。
 楼主| mmuuss586 发表于 2019-8-5 19:46 | 显示全部楼层
 楼主| mmuuss586 发表于 2020-1-14 09:19 | 显示全部楼层
赚点小小强 发表于 2020-8-21 14:13 | 显示全部楼层
这个好啊 容量大好多
电员师 发表于 2020-8-23 18:12 | 显示全部楼层
谢谢分享
 楼主| mmuuss586 发表于 2020-8-24 09:28 | 显示全部楼层
q2017 发表于 2020-8-29 22:30 | 显示全部楼层
谢谢版主分享..............................
馋嘴猫 发表于 2022-8-24 09:49 | 显示全部楼层
你好,请问你的446下使用4线地址的问题解决了没有?
我也发现只能2线,4线虽能工作但数据总是错。
chenci2013 发表于 2022-8-25 08:55 | 显示全部楼层
能够运行FATFS吗   
gygp 发表于 2022-8-25 11:32 | 显示全部楼层
PSRAM是外扩接口?   
macpherson 发表于 2022-8-25 12:47 | 显示全部楼层
QSPI接口的最大速度是多少呢?   
pl202 发表于 2022-9-8 19:44 | 显示全部楼层
QSPI的速度多快
Bowclad 发表于 2022-9-11 21:06 | 显示全部楼层
PSRAM应用中优势很大
febgxu 发表于 2022-11-3 21:51 | 显示全部楼层
QSPI的具体协议是什么,QSPI有什么优点
MessageRing 发表于 2022-11-4 18:34 | 显示全部楼层
这两种spi有什么不同的吗
adolphcocker 发表于 2022-11-5 09:58 | 显示全部楼层
新出现的存储器PSRAM(pseudo SRAM),称之为伪静态随机存取器。
alvpeg 发表于 2022-11-5 10:52 | 显示全部楼层
SRAM也不应该与PSRAM相混淆吧。      
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部