|
|
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 { |
|