打印
[STM32L4]

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

[复制链接]
楼主: mmuuss586
手机看帖
扫描二维码
随时随地手机跟帖
41
mmuuss586|  楼主 | 2019-7-21 10:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
自己支持下,谢楼上支持!

使用特权

评论回复
42
mmuuss586|  楼主 | 2019-7-27 20:36 | 只看该作者
谢楼上支持;
自己支持下

使用特权

评论回复
43
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信号是没问题的)。


谢谢!

使用特权

评论回复
44
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在什么时候死等太久了,没去仔细查什么原因。

使用特权

评论回复
45
mmuuss586|  楼主 | 2019-8-5 19:46 | 只看该作者

使用特权

评论回复
46
mmuuss586|  楼主 | 2020-1-14 09:19 | 只看该作者

使用特权

评论回复
47
赚点小小强| | 2020-8-21 14:13 | 只看该作者
这个好啊 容量大好多

使用特权

评论回复
48
电员师| | 2020-8-23 18:12 | 只看该作者
谢谢分享

使用特权

评论回复
49
mmuuss586|  楼主 | 2020-8-24 09:28 | 只看该作者

使用特权

评论回复
50
q2017| | 2020-8-29 22:30 | 只看该作者
谢谢版主分享..............................

使用特权

评论回复
51
馋嘴猫| | 2022-8-24 09:49 | 只看该作者
你好,请问你的446下使用4线地址的问题解决了没有?
我也发现只能2线,4线虽能工作但数据总是错。

使用特权

评论回复
52
chenci2013| | 2022-8-25 08:55 | 只看该作者
能够运行FATFS吗   

使用特权

评论回复
53
gygp| | 2022-8-25 11:32 | 只看该作者
PSRAM是外扩接口?   

使用特权

评论回复
54
macpherson| | 2022-8-25 12:47 | 只看该作者
QSPI接口的最大速度是多少呢?   

使用特权

评论回复
55
pl202| | 2022-9-8 19:44 | 只看该作者
QSPI的速度多快

使用特权

评论回复
56
Bowclad| | 2022-9-11 21:06 | 只看该作者
PSRAM应用中优势很大

使用特权

评论回复
57
febgxu| | 2022-11-3 21:51 | 只看该作者
QSPI的具体协议是什么,QSPI有什么优点

使用特权

评论回复
58
MessageRing| | 2022-11-4 18:34 | 只看该作者
这两种spi有什么不同的吗

使用特权

评论回复
59
adolphcocker| | 2022-11-5 09:58 | 只看该作者
新出现的存储器PSRAM(pseudo SRAM),称之为伪静态随机存取器。

使用特权

评论回复
60
alvpeg| | 2022-11-5 10:52 | 只看该作者
SRAM也不应该与PSRAM相混淆吧。      

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则