RT-Thread 基于QSPI驱动LY68L6400-SRAM

前言

使用的是RTThread 标准版,主控是STM32H743,SRAM是LY68L6400,使用QSPI

QSPI和SPI的区别

个人理解最大的区别就是SPI是串行,数据输出,而QSPI跟像并行输出,比如从单数据线的SPI到4数据线的QSPI。

LY68L6400

SRAM的QSPI的波形图,注意这个读取等待周期,十分重要。也是区别于SPI的地方
在这里插入图片描述
在KCONFIG中添加开启QSPI

	menuconfig BSP_USING_QSPI
        bool "Enable QSPI BUS"
        default n
        select RT_USING_QSPI
        select RT_USING_SPI      

RTT中的QSPI的读取时 需要配置的一些参数
在这里插入图片描述

RTT中的QSPI的写入时 需要配置的一些参数,和读取不同的就是命令码,空闲等待周期是为0

在这里插入图片描述

void qspi_ly68_write(rt_uint32_t waddr,rt_uint8_t *wdata,rt_uint32_t size)
{
		struct rt_qspi_device *qspi_dev_ly68 = RT_NULL;
		struct rt_qspi_message message;
		rt_err_t result = RT_EOK;
	
		qspi_dev_ly68 = (struct rt_qspi_device *)rt_device_find(QSPI_DEVICE_NAME);
    if(qspi_dev_ly68 == RT_NULL){
        rt_kprintf("qspi sample run failed! can't find %s device!\n", QSPI_DEVICE_NAME);
    }
		else
		{
        message.parent.send_buf = wdata;
        message.parent.recv_buf = RT_NULL;
        message.parent.length = size;
        message.parent.next = RT_NULL;
        message.parent.cs_take = 1;
        message.parent.cs_release = 1;
        message.instruction.content = 0X38;
        message.instruction.qspi_lines = 1;
        message.address.content = waddr;
        message.address.size = 24;
        message.address.qspi_lines = 4;
        message.dummy_cycles = 0;
        message.qspi_data_lines = 4;
        result = rt_qspi_transfer_message(qspi_dev_ly68, &message);
			
		}
}

void qspi_ly68_read(rt_uint32_t raddr,rt_uint32_t size)
{
		struct rt_qspi_device *qspi_dev_ly68 = RT_NULL;
		struct rt_qspi_message message;
		rt_err_t result = RT_EOK;
		rt_uint32_t i;
	
		qspi_dev_ly68 = (struct rt_qspi_device *)rt_device_find(QSPI_DEVICE_NAME);
    if(qspi_dev_ly68 == RT_NULL){
        rt_kprintf("qspi sample run failed! can't find %s device!\n", QSPI_DEVICE_NAME);
    }
		else
		{

        message.parent.send_buf = RT_NULL;
        message.parent.recv_buf = qrData;
        message.parent.length = size;
        message.parent.next = RT_NULL;
        message.parent.cs_take = 1;
        message.parent.cs_release = 1;
        message.instruction.content = 0XEB;
        message.instruction.qspi_lines = 1;
        message.address.content = raddr;
        message.address.size = 24;
        message.address.qspi_lines = 4;
        message.dummy_cycles = 6;
        message.qspi_data_lines = 4;
        rt_qspi_transfer_message(qspi_dev_ly68, &message);

				


		}
}

一些问题

使用QSPId DMA 的话会遇到一个问题,就是drv_qspi.c中的DMA写的不对
具体如下图,在使用STM32H7的时,drv_qspi.c中的参数还是hdma,但是实际上H7的文件中定义的是hmdma,在其他系列还能用,在H7上要用DMA是需要修改的。
在这里插入图片描述

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值