当前位置:网站首页>【开发教程4】开源蓝牙心率防水运动手环-外部 Flash 读写
【开发教程4】开源蓝牙心率防水运动手环-外部 Flash 读写
2022-07-20 18:13:00 【efans_Mike】
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
1 SPI+简介
本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
SPI(Serial Peripheral interface),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
2 硬件设计
本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。
图 1
3 软件设计
要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
然后,我们要进行的是对 SPI 接口的一个初始化。
void spi_init(SPI_Pad_t *cs_pad_param, SPI_Word_Mode_t bitmode, SPI_Role_t role, SPI_Polarity_Mode_t clk_pol, SPI_PHA_Mode_t pha_mode, SPI_MINT_Mode_t irq, SPI_XTAL_Freq_t freq)
第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。
第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。
第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
4 实验现象
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
(3)点击打开串口,4 是串口接收框。
图 2
配置完串口之后,打开我们提供的代码。
(1)点击仿真按键。
图 3
(2)点击运行代码。
图 4
完成之后,就能看到串口调试助手接收框信息如下。
图 5
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”
边栏推荐
- How to select and link Cen of cloud enterprise network to access self built database?
- 17 多态
- SVN小乌龟 merge分支到主干时,代码冲突的解决思路
- What are the characteristics of the DTS instance type of public IP self built database?
- 元宇宙:技术演进、产业生态与大国博弈
- 小红书商城整店商品API接口(店铺所有商品接口)
- MQ发布确认
- 淘宝天猫京东拼多多等平台关键词监控价格API接口(店铺商品价格监控API接口代码对接展示)
- 国密curl的用法指南
- 二师兄的纪录片
猜你喜欢
从“AI玩具”到“创作工具”的云原生改造之路
如何实现FinClip微信授权登录的三种方案
AI如何做新冠疫情预测?佐治亚理工最新《以数据为中心的流行病预测》综述
shell简介以及变量定义
This is probably the most complete summary of web crawlers you have ever seen
Unity & FACEGOOD Audio2Face 通过音频驱动面部BlendShape
17 多态
探讨基于小程序解决国产系统的应用生态问题
MySQL - UPDATE statement execution process
重新定义分析 - EventBridge 实时事件分析平台发布
随机推荐
Pr 2022 22.5中文版
华为路由器:ISIS基本原理与配置(含实验)
小红书关键词搜索商品列表API接口(商品详情页API接口)
【Matplotlib 画图】
不公平分发
14 object class = = and equals
13 succession
处理imagenet2012数据集
2022清华暑校笔记之L2_2 CNN和RNN基础介绍
【SOC】SoC第一个工程 Hello World
绘图库Matplotlib风格和样式
[translation] in depth understanding of modern web browsers (4)
How does AI predict the COVID-19? A summary of Georgia Institute of technology's latest "data centric epidemic prediction"
小程序如何正确引流?全网引流的3种姿势!
17 多态
The regular expression gets the content between the two identities
WIN10的cmd查看编码方式,命令行窗口修改UTF-8编码
请问银行理财产品当天可以赎回转出吗?
使用 GCC 避免堆栈粉碎攻击
shell简介以及变量定义