|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 FutureX 于 2022-8-3 14:34 编辑
0 Z0 F2 ^- D% M) p2 P4 u1 ?- M" p5 d
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 外部 Flash 读写
/ o( i5 _5 q+ E+ t
( O" `4 Y; J4 Y& E$ b0 D9 R s; u
0 v- y; Q0 n! S( D' N# O5 y& Y( X. Q$ C( u, u- P
1 SPI+简介
$ D% }3 ^$ N9 ~$ {( b/ Q1 R3 `0 d0 z8 W# D5 n- S! [7 r
本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。' K' h3 s$ a" |2 |" X4 J* u4 S8 I
2 u3 t2 k2 T! T SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。( Q( k4 u) B! L8 `/ x
该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
1 i" n* h+ z/ n: F' z! X( V+ p4 W
& y# k" F9 p4 R/ v5 j2 G+ m; v+ V9 E 我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。: I% [' e# R, {7 s% G+ O( i+ V
我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
' [+ {0 b N c1 ]8 [
% T2 p9 X C0 M- h$ E4 F2 硬件设计
* v u5 O2 p8 A! r( |$ S: Q; R
& S& [, s3 ?5 e1 R* C/ F 本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。. U" N9 S9 o n* y
4 ` A7 v8 Z3 ^5 W r9 |
) o6 K7 o' W8 z* g图 1
- }; G6 z5 g+ a% p# T$ J. \# m" |2 Z
3 软件设计+ G K9 T9 Z1 ]1 g, }
0 h; B0 _* B6 W- C# G
要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。) R i% V" u! |% b. q
9 J- Q$ o: @6 T9 w' d
( [5 ~" ^6 K( B3 S [
' {( s: I8 f( q5 @$ d) }4 t! n5 J% h" N, S1 [
; n3 T4 o( a- ^ 在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
( i6 ?: O& B% H. k! Q0 v0 ?' n9 r2 u5 f9 T2 e
然后,我们要进行的是对 SPI 接口的一个初始化。
9 W4 D- @6 ]7 j$ b- I
! L% T' L/ W# |" [' r 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)
. x+ f) X( N# t$ W 第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。+ Z+ a# h% @$ W( z5 I0 h0 Z$ d$ D
第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。7 y' R' i3 f c
第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。, r: H7 z0 d8 Z7 \4 ]
第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。9 ?' f8 K" M& b* `& p
6 Z5 x! N. ]* B* |! s6 C+ Y 参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
% H" J( d) t u2 a 最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。" b$ J3 X6 J% u. b8 l' @- P
" \( s* b; f6 T [( [! a1 }
以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:3 b% e* @1 p6 B2 x a, i
int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
8 u+ X* h! e6 U) O' y4 I$ N int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。8 G; o1 j/ c1 v) {- M" h$ ^0 e
+ B" _, C7 z P. v+ w* B: P2 J
4 实验现象2 I9 B O" u/ w5 p3 x
+ _+ q& N3 m+ v7 ^# j1 b 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
5 k% T7 R( `0 q- m) @8 o
( K; ?! [, P+ s* _0 A (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。 i0 V8 x# k7 v2 [9 r: Z1 T; c
) \0 f1 m R }) @3 w1 o
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。- U+ Y4 z' F4 P5 e8 x
(3)点击打开串口,4 是串口接收框。
& O" y1 c* [, z: @3 @8 X3 |# K
4 G9 o/ S& I2 K( J7 }. ?" B' ~
$ Y. B9 J- @+ D* M' c# b图 23 a, B g5 a- F+ }/ v
D0 O0 p0 O Q! n
3 ^2 M) j+ y! P' W/ t* G% E( D 配置完串口之后,打开我们提供的代码。6 J, W! j" ?% Z( H
" G8 w0 O% d) s' D5 L
(1)点击仿真按键。+ z- z4 T* p, H @6 s+ [
1 I5 A0 m. r" t( i6 z6 A5 o
+ h5 O$ Q- J. S; @& v! |
图 3
0 i- E6 U8 _( z. n/ N6 w6 ` (2)点击运行代码。
4 ~( ]$ M, P2 `: V6 k( ^/ Y, c1 `; B m9 ~, G9 F
+ ^# K+ Y* V# x" j图 44 W( Y- r! Q1 b, s; G: u
完成之后,就能看到串口调试助手接收框信息如下。& j' e& y0 A, M- u+ H
( f9 o3 e2 A6 s6 Q
6 U4 b0 M9 Z9 p1 r$ ?0 x$ H图 5
8 c# X0 S! ^" F) D& Q7 K/ D7 a' B
4 I+ Q* M& q! k! _" |# g( f; ` G
$ b2 G3 m/ S5 f8 W
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
7 e, z# K% g; U! }7 S
: Y3 O& x3 J t, E. R4 e
$ M- G1 t" O9 ^文件下载请点击:
2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf
(727.79 KB, 下载次数: 0)
! A' r4 r1 a. |8 v' s2 U# M- P! H' T$ O5 Y7 B/ @
8 g! ~# Z h5 L* V |
|