|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 FutureX 于 2022-8-3 14:34 编辑
+ w. s( [. b4 m/ b2 p& h: X( T# h) G1 F% P' i5 b* T
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 外部 Flash 读写 " F4 n. s) [- J B- O
7 T; C* B, n4 m0 A% x! c# Y
. X& _5 L& [! |8 R, @2 q7 \; V# s- H" j [! {3 @! @
1 SPI+简介
7 m: @5 g3 y8 w& X
; K1 b, {: N" m2 g$ D/ e: ] 本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
, n% D0 @8 G% g" M" P" N* ^; x; s" u" |" }& v- S( |3 [; y
SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
0 j$ S$ a6 s! t3 o) Q+ |% q& {# x, n 该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
0 c! }3 ^% k$ g/ @/ n2 ], ]( f: m4 c9 Q d
我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
( B7 a o' w' b% g, | 我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。* y( v* P0 e1 d
) g q& i! j" J d! A ~& }2 硬件设计! J' M3 E$ C! q' z& ?
* D2 C A8 {* J5 f6 U 本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。8 o- t6 G) G$ L2 m9 t- M
; ]/ m: ?0 G0 z4 q G/ b
8 ~, E" V* F$ g: L' h图 1
" A% k9 t/ ]! p! H, Y8 E4 d4 _
1 e1 l. @( P2 u' h& g/ t3 软件设计 p! \* s" y! ` @
5 D* _" H0 ~# z2 x
要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
- b4 Q! Y9 L j- x4 T7 c9 B+ U) ?3 n; ^" l' S& w: D$ `
3 }4 i- ~2 l) h0 m. ^8 v* C; N' K, V. v' N" x9 `5 u
8 ?% i4 n3 D3 z6 |( i( l7 [: r- }9 W; V2 M& ?6 ]
在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
- a3 f. Q$ s8 r- l% B7 V" `. a* U+ g) f+ e4 Q! ?! E/ _ l6 J5 m; y
然后,我们要进行的是对 SPI 接口的一个初始化。
8 r/ H& g- _+ s+ y- G7 I
- W2 W2 n* ^3 F 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)
9 Z6 f- a( l1 k9 q' i 第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。6 `' ?+ H0 _" m/ K! s8 C# n
第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。
3 c' W# F( a, X Q) k 第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。
9 L5 w8 X( J9 n0 N1 z$ @ 第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
6 J+ C. I" P' y, B+ A' P
" j5 V, c1 @7 B0 T" i+ A8 f 参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
) D5 P( }0 }/ D0 L9 h 最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。( D* _- D' u7 W& M+ m
% M) ~. z/ T+ N% v8 c( a. A
以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:) [+ U' O0 _' M: [2 I
int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);3 Y& T5 q/ y, X8 m
int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
- @: t0 w- E/ |1 r( P3 \4 s- t7 I4 O$ X$ n0 ?, J6 D
4 实验现象
1 f4 N% r }8 s0 x- J
: o! t0 F9 n! z9 m6 v' U6 [& t 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
+ x- K8 L& [0 @2 e3 x4 e7 j+ z9 }) l) ?9 s$ x# f* t) o9 k) n
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。) {* s8 w6 x! }% M* E1 l1 w/ S: h
$ j+ G0 c$ S% X( f' v/ c6 s (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
7 r8 w8 ?: Y' q# k3 Y' I (3)点击打开串口,4 是串口接收框。9 I: s8 V; W2 n' r
0 V' c# k W' n$ z& h, O& Y
* j q+ k! y# B: | a6 S& A图 2* A, r7 U! ` l2 T: x1 ^, A* x
; E; Q% {# X5 ], j' D$ h" B/ p* ~1 N( C9 I# ?# W% K
配置完串口之后,打开我们提供的代码。
) t1 n/ l3 Q$ H4 R
0 {: t7 b, [; L1 N/ _" p (1)点击仿真按键。
# h3 i0 u9 z6 w. I
+ I# Y( F J8 Q9 b4 T2 K- y
7 g" J% S) Q$ V* J: @5 J图 3
: u' e( _6 I5 s; y1 S" x9 Y (2)点击运行代码。9 n' o0 Y5 R& ?6 Z
0 B: e0 P/ k1 z. V, ~6 p3 R! @
( t4 B3 E5 C" M8 m2 E7 v图 4( h. J2 X- U* h) I$ z7 A. D
完成之后,就能看到串口调试助手接收框信息如下。! @. {2 \6 s9 \; V8 q
; I0 e* h; m1 y: O; _7 }- @
" R2 j* i- X$ y- [图 5: N- q X% @- ~ r$ w7 w1 n% q
+ q$ m! c4 B' W" T
; x7 I& D. J& S
9 ]+ X. Q5 s! d: [如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系( i. O$ e7 O9 t. d; ~: b) y3 G
4 [0 R9 @3 u q& d
. O. P4 D; V. p文件下载请点击:
2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf
(727.79 KB, 下载次数: 0)
2 Q8 {1 A/ `# Z% V+ z
! c% B+ I. d6 F3 @8 h
! s8 T& @4 T2 i8 p0 K* O: q+ V" e
|
|