您尚未登录。

楼主 # 2025-04-18 19:13:02

LB_YJY
会员
注册时间: 2024-08-01
已发帖子: 8
积分: 38

关于QSPI驱动的问题

版主好!
      我使用的D213EC,用户手册上看到QSPI速度可以达到100MHz,通过例程实验时钟能接近100MHz,很好!可是我现在使用QSPI发送大量数据到外部的设备。CPU就被严重占用,虽然我现在已经使用DMA发送数据,但是CPU还是不能释放。查看qspi_master_transfer_dma_sync函数中的qspi_master_wait_dma_done函数才发现,cpu在这里时死循环,一直等到传输结束才能释放CPU。请问这个是为什么呢?我想尝试修改驱动,需要注意什么呢?
    另外一个问题:在发送数据时QSPI总线输出的同步时钟,在发送多个字节(32或者64个)后时钟会有一段高电平的时间,猜测是等待fifo中的数据就绪。看手册fifo读写过半会有中断或者标志产生,为什么实际情况是每次都要fifo读空时,CPU或者是DMA才会给fifo补充数据呢?这个是因为对于外设获取DDR3内部数据时,芯片也有设优先级吗?重点是给cpu、显示模块、2D加速器使用的吗?

最近编辑记录 LB_YJY (2025-04-18 19:23:37)

离线

#1 2025-04-21 15:38:21

五花肉
会员
注册时间: 2025-02-21
已发帖子: 3
积分: 53

Re: 关于QSPI驱动的问题

1、因为当前demo板上QSPI的主要应用场景还是读写Flash,考虑到对存储性能的要求QSPI每笔都是占用CPU轮询等待QSPI传输完成,如果想使用异步加中断回调的方式可以参考drv层的drv_qspi.c 中 spi_nonblock_set() 函数配置发送时使用异步方式,发送后上层可以通过spi_get_transfer_status()主动查询状态也可以在完成回调中处理;
    需要注意的是,该方法仅实现了发送方向的异步,接收方向可以参考发送函数使用hal_xxx_async替换hal_xxx_sync;
    如果对QSPI比较熟悉的话也可以直接调用hal 层接口

2、QSPI等待是因为DMA搬运速度不够快,d21多master使用dma情况下有风险,当前dma参数用的是最低的;其他IC没有这个问题
    如果确保没有其他master在用dma,也可以修改hal_dma_reg_v1x.h下的DMA_SLAVE_DEF(xx_QSPI_xx), 参考其他版本的参数

离线

楼主 #2 2025-04-21 19:46:18

LB_YJY
会员
注册时间: 2024-08-01
已发帖子: 8
积分: 38

Re: 关于QSPI驱动的问题

非常感谢!谢谢你解答了我的疑惑!:)

离线

#3 2025-04-21 22:34:11

ArtInChip
会员
注册时间: 2023-11-11
已发帖子: 231
积分: 237

Re: 关于QSPI驱动的问题

@五花肉


专业!

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn