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_QSPIbool "Enable QSPI BUS"default nselect RT_USING_QSPIselect 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是需要修改的。
RT-Thread 基于QSPI驱动LY68L6400-SRAM相关推荐
- 基于rt thread smart构建EtherCAT主站
我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...
- xpt 2046的触摸屏 rt thread设备驱动框架
1 基于rtt 开发触摸屏驱动 准备使用rtt 框架 , 驱动xpt 2046的触摸屏, 翻阅大量资料发现, 大部分文章强调的是时序图, 而且很多代码要么直接操作寄存器, 要么是io 口模拟, 只能用 ...
- 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)
最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...
- RT Thread根据开发板制作BSP方法
之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...
- 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层...
系列回顾 在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出 ...
- 关于RT thread系统节拍时钟的配置
关于RT thread系统节拍时钟的配置 -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...
- rt thread studio使用QBOOT和片外flash实现OTA升级
我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...
- RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程
(1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...
- rt thread系统下添加wiznet软件包后,不插网线CPU利用率100%问题
rt thread系统下添加wiznet软件包后如果不插网线的话其他任务运行很卡,使用ps命令发现优先级低的任务很多都超时了 rt thread线程错误码 添加了一个可以查看CPU利用率的软件包CPU ...
最新文章
- 多个servlet配制方法
- 奇怪吸引子---Finance
- WEB高性能开发(10) - 疯狂的HTML压缩
- 《软件需求规格说明书》 ---学士之路
- Java 正青春:现状与技术趋势报告
- 我自己关于C语言,编译器,标准库,GUN glibc,CRT ,API之类的理解。
- 云服务器定时启动程序_过去、现在和未来:开发一款微信小程序的技术迭代全过程...
- opencv_图像反转
- 定时任务的选型及改造
- 947. 移除最多的同行或同列石头2021-01-23
- 机器人工程师学习计划(新工科自学方案)------杨硕
- 调查问卷题目设计注意事项
- 微信小程序开发者工具平台+Hbuilder开发平台下载
- android输入法ios下载安装,仿ios输入法
- MAC上报错“The JAVA_HOME environment variable is not defined correctly This environment
- 大话设计模式之爱你一万年:第十八章 行为模式:中介者模式:那些年的情书-邮局传情:1.	中介者模式基本概念
- matlab 收敛速度,BP网络的收敛速度和设计步骤【转】
- 深度解析UG二次开发装配的部件事件、部件原型和部件实例
- 小学计算机画线反思,会画画的线活动反思
- 如何确定复杂句中同位语的对应词(对应名词)?