找回密码
 注册
关于网站域名变更的通知
查看: 65|回复: 0
打印 上一主题 下一主题

【开发教程4】疯壳·开源蓝牙心率防水运动手环-外部 Flash 读写

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-25 14:20 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
* W8 l3 T& ?4 x- g3 S5 G8 N
) p9 H1 n( K) G6 T2 h  e- y
2 G/ t5 k2 x( m! n( H9 O7 u
4 o- B0 @: h  w" @5 k* f1 c

+ y/ X/ S! Y6 U  J$ f" D! ]" E  h7 D" s
9 z" q( D+ T' x9 i& ~5 j) v9 Z1  SPI+简介2 b2 V/ P4 W7 ]# ]
9 K) i" R  b9 ^$ t, V- z
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。2 R* j% d2 U8 U2 l

6 P2 h  T/ Y$ r$ y' e+ r, L  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
. a7 c* ?! w: r8 F$ M3 j3 |  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
+ m# A5 f3 h4 _7 T2 \! `1 l, n! z4 ^; B4 y$ H* e9 \+ h. K( A' R* L
  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
9 v& `! p7 {! O! M3 J' b9 G4 w  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
. R0 {: T* H/ k0 }1 q  q& m4 Q! x7 v$ m# w/ q5 L8 W
2  硬件设计
& D0 |( I$ Z& s5 q% r* a$ O3 x6 J: x' K; p( D
  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。
2 ?4 T' H3 Z7 g% l
7 s' {/ n2 S2 U% I: N+ w
4 R/ w1 U" w0 a: ]3 H! \) g5 Y; ~$ s2 \5 p图 1
" t4 }$ g7 c( K" ~# O) R0 G/ ?' H! t
3  软件设计$ G7 g) e8 p: J  c% ^8 C
2 x. \6 \. M7 m- h
  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
# P$ r$ C3 l" d; w3 N3 k. h: u7 k8 @$ }5 p9 o0 |. \
. x' K( H2 V% u) s7 T3 v8 Z
7 L$ K) _4 C3 e# n( B& `4 o9 d( J

; J- j! B: I$ R  F( B- g' |. p# s' H, m3 ^
) \9 _5 `' Q" {2 S0 \% d
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。# K- b: w8 Y9 f

& g( _, I6 J; s- B8 I  然后,我们要进行的是对 SPI 接口的一个初始化。
6 u& p, U4 y6 b+ t& ~. d; V2 F6 k  S. e( O, v" t  Q
  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)
' L: C' c+ ~! ?( D9 @0 s/ Z3 E  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
  m3 {! ]" {' ^" @2 |  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。; {( b0 {1 Z! M7 z
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。4 h! r$ z  P4 I$ p5 S
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。% H: V6 w0 C- f4 k7 @7 c* }8 I( y
. v- |8 _  r! n8 z
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。% x2 U- n4 ^( [- Z$ X& X
  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。6 A# C$ c& L) k+ L

& }( V) k; u  W( y2 U. y% [  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:+ U3 j# `$ x! q- q" e
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);# U5 Q8 W/ g% F. Q% l! _
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。$ c# ]4 X1 v# v% o4 B& v. Y1 T# U

1 K5 ~) R, A9 L4 z) [3 d4  实验现象
- m; I8 {" s9 L5 \  k( Y: m6 m7 w; D6 X8 V  a
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。- i& _: s. b5 P  b; K

/ V: |- D, F1 r2 \  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。+ U7 ^) O1 [" q" s" \3 G

2 N2 Y* [9 f8 A& l1 T# g& H- f( w  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
% h+ A1 ~. ]! U0 y; |  (3)点击打开串口,4 是串口接收框。6 H5 B: f" g4 u

2 q& l/ y* m7 G+ ^* n        
7 n& D  |5 I/ V- W图 2+ h0 ~0 X# c! ^/ [/ _( T/ E

( |' l+ A+ X6 J" c& G
  X+ k. |; x3 v6 u# F  配置完串口之后,打开我们提供的代码。
- [$ F( U1 G- S/ w' w' Y0 c
' W2 @$ t+ Z; F' N8 v% ]. n  (1)点击仿真按键。% I0 ]; \' r3 H

5 W7 c8 Z4 V; r% q0 i+ f6 ?5 T1 o  y3 Y
. G2 R+ o# @  k3 o9 n! D2 q图 37 b, n1 U4 o- Q( ^5 j% C
  (2)点击运行代码。3 O3 R% _9 _) D" w
7 e% F/ S8 M7 I4 O! b" \$ e

3 F, b$ o4 M. S' p9 [0 E! G0 @图 4  q1 T1 h2 s9 N; S' Z0 S
  完成之后,就能看到串口调试助手接收框信息如下。
3 C' T  D" V# \4 F+ e; P! l6 r7 P
, \/ w+ z: M4 G2 B% z# X $ j" w* I* t. x4 E; i
图 5
9 a' c6 y6 n+ s  P4 k/ T1 }" e! ~" O! O! U

8 K/ f9 Y0 H4 j. f- r& U* }, |$ |# \5 x& A, u! Y+ ]
. g" C# B6 ^- U* N/ w9 e( l2 `
, _5 {, r, Y; e# u
文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) 2 G9 A1 t3 d3 b6 {3 l

0 H8 q. F9 w+ R& X9 @' s- r" {
) _- `3 G0 V& m5 {
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 19:52 , Processed in 0.156250 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表