|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 FutureX 于 2022-8-3 14:34 编辑
% w" u9 `+ g) u# Z; Y1 r
0 o0 e$ { X$ E) q5 P9 Z开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 外部 Flash 读写
( H+ r5 G$ j+ l$ p8 t* [1 H9 N" L8 W. h! o, q
' u* Q# A: }( x
! |, ?4 Y. k* K0 _/ H7 [3 j
1 SPI+简介
! m+ `7 k, \# b Z) k
2 A7 f$ o- m, I. w1 V: a) q ] 本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
0 J* Q6 K5 t% D( G2 y8 v5 \" x: X# w
SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
: n9 Q1 `) Q2 A& d, S3 a 该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
7 `7 C* L z, S$ k. j6 Y. V1 X
* Q* D# i( C0 S3 { 我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
- ~* l ?6 d9 R) n. `5 V+ U5 j; P 我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。( C' f2 G* L9 Y4 e) Z
1 ^2 g! Y& E! f, }( r# ~) ~2 硬件设计
& B @" w8 K& Q1 ?4 g
' e6 ]. f5 W0 I8 \* V& ? 本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。$ l- x7 x- J8 _( c# @6 ` ~
7 f: g x+ M) h% ]* T; V, H
1 T- N4 M; r- C4 m: R
图 1( s. e7 ~- n; {4 V+ @
( c' a1 V0 M2 O+ R7 b' O3 软件设计$ k* b1 c8 C; p
, y& Z6 N7 r5 U" E, T 要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
3 s9 H; ]* u: S8 F0 k
1 j6 M: a1 B& H z/ |& H0 ^ H6 ~* e5 v$ Z
$ Z, Z$ b$ P2 B+ T. f6 o' V" r0 A4 z. M9 g0 k5 ~" E0 x
. G% z1 ]+ c# A0 ^: C 在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
+ n/ Q! s- J4 }" j; u$ P# k! _+ V, ?6 E2 W# S
然后,我们要进行的是对 SPI 接口的一个初始化。
9 x5 Q) Q6 m- {) r& }# T; u% m: }; p/ p- b
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) Q7 S! G) C* H3 y! r; p; n
第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
' Q) x# R8 `- s' k8 E3 y 第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。$ B" B2 J( Y' H2 R
第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。$ r8 w2 d0 N; }: H4 E) \, G
第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。8 s S! c6 I$ a( c4 }1 t- O
" X, y; r2 h/ R: m) D" {
参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
) s& r) B' B5 r/ Z 最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
- c6 |- L- Y2 s
& R% R3 ~2 F. d3 M9 X+ f3 m2 i 以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
# D8 h: o, C2 P9 y4 v int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);! P# ?2 n2 A, \2 J
int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。* R1 f0 X+ Z% q- z4 t2 O1 p
( g* |( {, z4 e) g4 实验现象
3 |# u& y1 Z% W# c1 E. l& }% z& \2 a& B8 Y* Q; W' y( s# H
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
; m6 r0 F! K. V6 G; R+ p* z
1 P. A: m( I) Y9 Y0 y8 D (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
9 D) I/ F7 ~. v* t. K
" q. J& V" [$ [8 F( D: {% L (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。0 k W E- `7 ?* w6 `( w
(3)点击打开串口,4 是串口接收框。
7 }( [3 m: c+ p3 A* s" O
8 N$ ^ R; x! s0 `. X1 ^ 8 e" r, O; w/ d0 g# N3 ]& e" d
图 2
6 s* R5 q/ ]" u( D; T; B4 y$ a) L- w: X- @
& i A6 i. I! a# {) A9 S# B 配置完串口之后,打开我们提供的代码。+ O# H2 u. [# X4 h& P4 \+ e" u
) j7 b/ d. J: ] (1)点击仿真按键。
) o+ f4 [- E( k( }( _3 p0 B8 q1 Y* A$ [
Y( A3 } b9 J& Y2 m图 37 k) Z+ h, b4 Q0 D, j
(2)点击运行代码。
1 p, |4 I7 y- u) j3 U# ^1 J, {9 ^# M# ^7 y0 H; X0 s
$ p. r3 x. q5 z' v) j ]) f图 4
5 p) ?/ L8 g% f5 u7 s) l" H% s 完成之后,就能看到串口调试助手接收框信息如下。
" c! D' }" U& x# H/ ], P9 M
0 U# U) T( i/ _3 E0 {, g: m% }# [9 i* q @: f) e
图 5! R* E# K; E6 r* e: q, R% S
" {+ P# H; I3 Y/ P) ~, H
* }7 l- }* B# D7 ^2 ~/ N7 g+ w# E
1 Z: O" G- V; _/ }5 G' [2 M如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
6 [$ V! c5 t; _% J7 A# ~- g5 g! b+ j
2 D2 K! ^) m& y. P- `' U
文件下载请点击:
2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf
(727.79 KB, 下载次数: 0)
6 t* Q* ~+ B5 `$ |' p) }
; K+ p$ E5 T" K( ]8 N6 W( j, L: H
f' Z9 y# u D' q/ ? |
|