基于ART-PI SPI驱动W25Q128

2023-05-16

吐槽和避坑

  1. 弄spi弄了一天,使用的开发板是art-pi家的h750,本来准备直接用rt-thread studio生成的,但是不知道怎么回事配置出的工程文件都有问题,不是线程运行不了就是缺少定义,所以最近在一个一个测试外设
  2. 使用spi驱动w25q128参考了正点原子和野火的程序,不过由于没有在h7平台上的代码,所以移植起来还要花点时间,很多api也不一样,所以有的要一个一个看,这里说一下正点原子和野火代码的区别,原子家的比较偏寄存器,野火家的封装做的很多,好多自定义的变量我都以为是系统变量找了好久。
  3. 再说一下几个坑,主要是关于为什么读出的数据的0xFF的问题
    • 芯片片选引脚没有设置成输出模式而是选择复用模式感谢这个博主,我就是这个问题
    • 输出极性问题,正点原子使用的是如下极性
        SPI1_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH;    //串行同步时钟的空闲状态为高电平
        SPI1_Handler.Init.CLKPhase=SPI_PHASE_2EDGE;         //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    
    经过测试下面这种也是可以的(也就是我选择的极性)
      hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
      hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
    
    • STLINK频率问题,网上有的说要把这个数值设置为8MHz,但是我设置为10MHz也可以用
      在这里插入图片描述
    • FLASH时钟频率的问题,我设置的是8MHz,其他的就没有测试了
      在这里插入图片描述

移植(将正点原子F1的移植到H7)

  1. 首先将所有的功能函数全部移植到spi.c里(由于我是使用cubemx生成的初始化代码,所以就直接放到了注释用户代码段里面,这样之后cubemx重新生成的时候代码就不会被覆盖)
  2. 修改诸如u8 u16 这样的定义为 uint8_t 和 uint16_t 等
  3. 替换位带操作,比如我将 W25QXX_CS=0; 替换成函数宏W25QXX_CS_L();
  4. 替换延时函数为你自己的延时函数,我直接使用HAL库的函数HAL_Delay()
  5. 删除无用的GPIO初始化代码
  6. 改变 uint32_t FLASH_SIZE;名为 uint32_t flash_size;大写的应该和系统变量名有冲突
  7. 修改一些参量以适配当前芯片,比如我使用的是W25Q128,所以内存大小就是128Mbits=16MB
    • 修改flash_size = 16* 1024* 1024
    • 如果W25Q64指令集不同就要修改指令表
    • 修改扇区数量和页大小等(引用此博客部分内容)
      在这里插入图片描述可以看到对于Q128,有256个块,块容量64k(不用修改),有2048个扇区,每个扇区4K字节(不用修改),有65536页

驱动详解

以后有时间再写吧

代码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于ART-PI SPI驱动W25Q128 的相关文章

  • RTT WK2412 spi-uart

    1 添加软件包 xff0c 打开硬件 2 代码里根据硬件配置spi span class token macro property span class token directive hash span span class token
  • 调试笔记2:SPI+DMA

    一 内容简介 说明 xff1a 关于DMA xff0c SPI的基本知识这里不做介绍 本文只讲述SPI 43 DMA的实现 这里仅实现从外设到内存 从内存到外设也可以参考修改 目的 xff1a 使用STM32作为SPI从机接收数据 xff0
  • SPI的CRC校验计算

    22 3 6 CRC计算 CRC校验仅用于保证全双工通信的可靠性 数据发送和数据接收分别使用单独的CRC计算器 通过对每一个接收位进行可编程的多项式运算来计算CRC CRC的计算是在由SPI CR1寄存器 中CPHA和CPOL位定义的采样时
  • pixhawk px4 spi设备驱动

    此篇blog是以nuttx官网介绍为出发点 xff0c 先分析如何初始化的 xff0c 再分析如何读取传感器数据的 xff0c 最后对比了字符型设备操作和spi驱动的实现方式的差别 如有错误还请指正 6 字符型设备 所有的结构体和API都在
  • 【STM32CubeMX】STM32H7-RTOS-SPI-W5500

    工程源码下载 xff1a 基于裸机和Freertos的W5500网络通信工程 目录 1 移植W5500步骤 2 Cobemx配置步骤 2 1 时钟配置Clock Configuration 2 2 Trace and Debug配置 2 3
  • 通信方式梳理:GPIO,I2C,SPI,UART,USART,USB的区别

    GPIO xff0c I2C xff0c SPI xff0c UART xff0c USART xff0c USB的区别 1 简单区别 xff1a 1 xff09 GPIO xff08 General Purpose Input Outpu
  • 总线协议一(UART/RS232/RS485/IIC/SPI)

    目录 基础概述 xff1a 一 UART xff08 为串口通信方式 xff09 二 RS232协议 三 RS485协议 四 I2C总线协议 五 SPI总线 六 I2C和SPI的区别 基础概述 xff1a 总线的本质就是一根导线 xff0c
  • WS2812灯珠(二)-- STM32 SPI+DMA方式驱动

    通过硬件SPI的可以很巧妙的模拟出WS2812的通信时序 xff0c 用spi的8位数据模拟ws281x的一位数据 要将系统时钟设置为56M xff0c SPI分频数设置为8 xff0c 则SPI的通信频率为7M xff0c 1s 7M 1
  • UART, IIC, SCI, SPI, 232, 485, 422, CAN, SDIO, GPIO, MODBUS, TCP/IP汇总简介

    UART IIC SCI SPI 232 485 422 CAN SDIO GPIO MODBUS TCP IP汇总简介 UART xff1a Universal Asynchronous Receiver Transmitter xff1
  • Single SPI、Dual SPI、Qaud SPI

    博主目前已经用上了 QSPI
  • 基于c3c2440 Linux SPI驱动程序移植与测试

    基于c3c2440 Linux SPI驱动程序移植与测试 环境 ubuntu14 04 TQ2440开发板 linux3 0内核 linux3 0内核移植笔记点此 1 配置内核 Device Drivers gt SPI support g
  • 关于IKEv2中安全策略索引SPI的生成

    首先引入一个PF key的概念 PF KEY Key Management API 提供IKE模块和IPSec核心之间的接口 在RFC 2367中 有一个SADB GETSPI消息 这个消息就是实现允许一个进程获取SPI值 该值标识所给的s
  • 使用Linux内核里的spi屏驱动-fbtft

    Linux内核里已经提供spi接口小屏的设备驱动 在内核的配置选项 make menuconfig ARCH arm CROSS COMPILE arm linux gnueabihf Device Drivers gt Graphics
  • FPGA驱动0.96oled显示屏 (4线 SPI) verilog语言

    之前也陆陆续续看了很多博客 也都能在自己的屏幕上显示出来 但是问题就是不知道怎么修改代码显示自己希望显示的东西 而且由于没注释原因看不太懂 最终的实现效果最终实现效果视频 b站视频链接1 评论区有人给了源码的百度网盘链接 csdn博客链接1
  • Linux SPI 总线 和设备驱动架构之三:SPI控制器驱动

    通过第一篇文章 我们已经知道 整个SPI驱动架构可以分为协议驱动 通用接口层和控制器驱动三大部分 其中 控制器驱动负责最底层的数据收发工作 为了完成数据收发工作 控制器驱动需要完成以下这些功能 1 申请必要的硬件资源 例如中断 DMA通道
  • CH347读写SPI Flash

    前面耽搁了几天 今天终于把CH347 SPI接口调试好了 CH347动态库中SPI接口函数如下 typedef struct SPI CONFIG UCHAR iMode 0 3 SPI Mode0 1 2 3 UCHAR iClock 0
  • Linux,spidev:为什么它不应该直接在设备树中?

    我想定义一个具有用户模式访问权限的 SPI 设备 如中所述http linux sunxi org SPIdev 按照这些示例 我在设备树中添加了以下内容 ecspi1 other stuff mydev 0 compatible spid
  • Python - 如何使用 ioctl 或 spidev 从设备读取输入?

    我有一个提供它的供应商提供了一些 C 代码来监听按钮按下 该代码使用ioctl 该设备具有 SSD1289 控制器 按钮不需要额外的引脚 可以通过 SPI 读取其状态 这就是我想要的 读取按下了哪个按钮 我试图在 Python 中为我自己的
  • 在 ARM 处理器上执行存储在外部 SPI 闪存中的程序

    我有一个 ARM 处理器 能够与外部闪存芯片连接 写入芯片的是为 ARM 架构编译的程序 可供执行 我需要知道如何将这些数据从外部闪存获取到 ARM 处理器上以供执行 我可以提前运行某种复制例程 将数据复制到可执行内存空间吗 我想我可以 但
  • 如何用 C 语言从串行(SPI)连接读取数据?

    我正在尝试编写一个程序 该程序将安装在 Linux MCU Raspberry Pi 上 该程序将读取从另一个 MCU 我将自己构建的自制程序 发送到它的串行数据 我研究了如何做到这一点 并认为我有 大局 但仍然缺少一些东西 其一 我需要启

随机推荐

  • 有哪些ubuntu上的文件对比的可视化工具?

    在 Ubuntu 上进行文件对比的可视化工具有很多 xff0c 以下是其中一些常见的工具 xff1a Meld xff1a Meld 是一种图形化文件和文件夹比较工具 xff0c 它支持两个或三个文件的比较 Meld 可以高亮显示差异 xf
  • ant design vue pro 面包屑移至最顶上

    ant design vue pro 面包屑移至最顶上显示 xff0c 如图 操作如下 xff1a 1 在src layouts BasicLayout vue 中 lt pro layout 中加入如下代码 lt template v s
  • VMware中ubuntu系统出现花屏和蓝屏的解决方案

    VMware虚拟机中打开的ubuntu系统 xff0c 由于暴力关机或某些原因突然死机 xff0c 关闭VMware软件后 xff0c 再次启动ubuntu系统 xff0c 进入后出现花屏和蓝屏的现象 解决方案一 xff1a 在键盘上同时按
  • Qt多线程总结

    一 Qt下使用线程主要有两种方法 一种是传统的继承QThread类 xff0c 重写run方法 该方法已经落伍了 xff0c 主要原因线程不安全 xff0c 需要自己手动加锁 xff0c 比较麻烦 xff0c 所以推荐使用方法二 定义一个工
  • 关于 vue3运行报错Internal server error: [@vue/compiler-sfc] <script setup> cannot contain ES 的处理方法

    大致的意思就是 script setup 不能使用ES模块导出 其实问题就出在 xff0c 给官方给出的方法混用了 一种是 xff1a lt script gt 标签里面配置 setup 另一种是 xff1a export default
  • sublime text 4 4126 已测可用

    1 打开浏览器进入网站https hexed it 2 打开sublime text4安装目录选择文件sublime text exe 3 搜索80 78 05 00 0f 94 c1更改为c6 40 05 01 48 85 c9 第一个匹
  • docker安装的mysql8修改my.cnf,无法启动容器解决

    参考 xff1a docker修改mysql配置文件后 xff0c 无法启动mysql容器 super ye man的博客 CSDN博客 docker 启动的mysql 配置文件 新手上路 xff0c 使用docker容器必定会遇到一些坑
  • armbian取消休眠去屏保并安装中文输入法

    dpms显示器休眠设置 xff1a 开启 xff1a sudo xset dpms 1 1 2 取消 xff1a sudo xset dpms xset设置屏保 xff1a 设置10秒后进入屏保 xff1a sudo xset s 10 6
  • QT主界面卡死崩溃解决(5种方法)

    声明 本文来自转载 文章作者 张小飞 文章链接 https cryfeifei cn 2020 05 28 qt zhu jie mian qia si de jie jue fang an yi xie ju ti shi xian fa
  • 数字电路(三)最小项和最大项

    逻辑抽象和描述 把实际问题抽象成变量和逻辑函数根据逻辑函数绘制框图使用真值表或者自然语言描述函数表达式 最小项和最大项 最小项和最大项的定义SSOP和 sum 记法最大项 xff1a 下标和真值表行号一样 xff0c 进制转换值要取反 同一
  • 自己写库文件

    自己写库文件 在项目工程文件里写 h文件写在include文件夹里c文件写在src文件里面 在系统文件夹里面写 找到系统的库文件夹 xff08 在json文件里面找 xff09 在src文件夹里面添加h文件和c文件注意新建二级文件可能会出错
  • 数字电路(四)多级输出

    多级电路 什么是多级电路 xff1a 级数大于一个级的电路如何读电路的级数 xff1a 由外向里 xff0c 层层数多级电路的优缺点 xff1a 优点是可以减少门和输入的数量 xff0c 进而减少成本 xff0c 缺点是增加电路的延时如何得
  • echarts 饼图中间自定义显示内容

    做驾驶舱时 xff0c 使用到空心饼图中间显示自定义内容 xff0c 两种方式实现 1 title 进行定位 效果差点 2 graphic 查询 api后 xff0c 最为符合的使用 graphic 代码如下 xff0c 完美实现上图效果
  • 云服务器(一)基本操作

    xshell远程连接云服务器 乌班图 修改密码注意乌班图默认是禁止ssh远程登录的 xff0c 需要进行设置参考此处 VNC图形界面 添加防火墙规则 xff1a VNC使用的是TCP协议 默认端口5901远程ssh连接安装一些必备的包 xf
  • 小松的STM32教程(6)——ADC

    预备 学习目标 学会调用Get Adc Average函数会使能多个ADC通道 概述 ADC输入电压范围 xff1a 2 4V 3 6V xff0c 一般使用0V和3 3V 数据对齐 xff1a 16bit存放12bit的转换数据 xff0
  • 小松的STM32教程(14)——内部flash模拟eeprom

    为什么要用Flash来模拟EEPORM Flash更适合作为程序存储器 xff0c EEPROM更适合作为数据存储器 xff0c 存储大量数据的时候就需要使用EEPROM xff0c 廉价的MCU往往只有FLASH而没有EEPROM xff
  • Qt小项目(三):定时器和日历

    UI QTime和Qtimer类 类区别QTimer定时器类 xff0c 当时间溢出 xff08 记时超过定时区间 xff09 的时候 xff0c 就会发出timeout信号 xff0c 触发槽函数QTime时间类 xff0c 提供时分秒
  • stm32延时函数解读

    时钟树 寄存器 SysTick gt LOAD xff1a 计时器装载值 SysTick gt VAL 当前值 SysTick gt CTRL 控制寄存器 延时初始化函数 计算AHB时钟 span class token keyword v
  • 基于 ART-PI FMC驱动SDRAM

    引脚接线图 SDRAMGPIO解释FMC A0 5PF0 5地址线FMC A6 9PF12 15地址线FMC A10 12PG0 2地址线FMC D0 1PD14 15数据线FMC D2 3PD0 1数据线FMC D4 12PE7 15数据
  • 基于ART-PI SPI驱动W25Q128

    吐槽和避坑 弄spi弄了一天 xff0c 使用的开发板是art pi家的h750 xff0c 本来准备直接用rt thread studio生成的 xff0c 但是不知道怎么回事配置出的工程文件都有问题 xff0c 不是线程运行不了就是缺少