|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 FutureX 于 2022-8-3 14:34 编辑 4 U: p3 U5 B& ^. r5 c% c! l4 p4 `* D
" u3 U. |# k1 c+ m- f. K+ Q! T; F8 @开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 外部 Flash 读写
- `2 t0 L5 b5 ^- L) Z$ c# a
+ n2 f* A4 w0 [) @7 @8 a9 { a, R
5 |+ l( y2 h5 v$ l+ G, ~
1 SPI+简介
! k. E7 z# u. V& x. W9 G* a; l( W# E
* a3 h7 \6 g' Z+ k7 J4 [ 本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。; X% X$ P5 a9 z& o' _" M" Y
! J p7 ?* b" r5 K6 } SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
$ u. a3 @, a* a4 _4 \ 该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
; u% a& J4 D9 o# S7 a& K0 F' j( \
. U2 q8 s7 J5 a& Q! b 我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
( x2 c4 }- Q+ r8 {6 G+ X5 ] 我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。9 o+ ]$ F- K' y0 t8 j8 w
$ X; I) `* k3 K) X% h2 硬件设计
q6 _4 u! \( ~9 g
/ J: L4 Y( U8 }+ e* w1 u; e# o 本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。
- ~ H+ R0 a4 z& H% h& `1 F
1 d' l. `& ^. k/ ~' y( f0 Y7 r
0 R' h# ~4 x. J' |4 n图 1; h/ h3 D- f8 W" m$ v
& N8 r- |4 p# h, f4 _
3 软件设计! J% I& C9 i0 h# c+ Y
7 X; g' r; Y+ `1 V6 j/ ^
要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
& h4 p- q% E0 w' D5 p
% T, o2 n* c( \4 ~
! Z+ \) }9 \! j4 N% l- C" { V5 i" C+ a) t
$ u/ p% U6 d$ s0 G }4 {! ]
: w+ Z K( e! y
在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
; d/ i7 Y' K1 ~' E
6 ^ q; R/ Q* |& ]' ` 然后,我们要进行的是对 SPI 接口的一个初始化。7 x: L, g7 C! X' T1 k
( x# v& E# _- D" e- p, f9 x$ A 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)
' N V& P/ f, o- j; |0 V 第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。# g& ~) N/ N( N+ k! E2 U8 F
第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。" K' a$ Y% J, f% g# R; `6 K
第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。+ T! _9 K8 G8 _4 y. s7 q
第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
/ f/ w9 d6 y* n% o4 @5 G6 o# y4 R0 f8 M; C. @
参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
0 Q. m3 h+ G. t 最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
, L# q; U6 p) M9 Y& g! R4 K
' w& x, X9 W! f9 f# D6 ? 以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:! r& z# a# H9 L* `& _
int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);8 F8 D6 b; K/ X8 K' W
int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
0 s5 F _7 O/ _# { w0 j3 v) K( Q& w% \ k& X. |! A; [- A
4 实验现象$ O b. F/ ~0 E! e c0 ?4 \
0 ^, f$ ]) h- u5 N
首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
. u' B J/ O. [& B$ V6 {# O
6 B N0 _5 I, I& k; l) R1 r* W (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。( x4 P; @3 Y7 }8 g
6 u: Z8 n4 r0 a# e% f
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
7 V( [1 }8 k' a: ~ (3)点击打开串口,4 是串口接收框。
; ~4 g" f3 t. {! `4 C# Z/ \; L5 V: \! f5 l, {& g
; d7 k" z5 ^3 U图 2/ D. d. ~" C' n" Q; ~; F6 ]5 D
( l2 W4 Q8 P) T ?+ k0 \, _5 n! V1 C) q0 L2 E$ J! M$ Q
配置完串口之后,打开我们提供的代码。
/ o- E* }( S, v4 E1 N, H0 q9 B) ]" V
(1)点击仿真按键。
( ]. {% \9 P8 f7 G
9 p2 c' u8 l! X: h L. F4 l7 {+ s
8 V* ?8 ]* X! x+ `图 36 i. _" x& h0 x5 I8 f% b
(2)点击运行代码。
1 @) i7 N% Z* }9 w; ?0 z2 T4 _% ^/ Q6 {# d
$ ~8 ]- F. L1 j图 4
8 v3 ]/ f; N9 D4 q 完成之后,就能看到串口调试助手接收框信息如下。- C9 W ^) V7 B G
- U* Z$ B0 L4 c
& T6 m$ S3 H& B8 D& Y9 @& L1 b: m图 5/ t1 Y$ D" P0 M3 g
3 S2 l0 h# B' X) c$ a* s
% ?/ v' N6 N8 O7 {7 k& c1 x! U
1 O7 X" p) @. F+ N: P7 R3 P! r
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系! h- c! I% E) H# N# ~8 m0 F! E
* Y3 A5 q7 f" |* r; Z a
7 ]/ R) U' @7 f: [+ W9 b文件下载请点击:
2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf
(727.79 KB, 下载次数: 0)
1 j* l% M% H! z; h9 k
% t X5 s7 l9 W1 a! Q( I, x
% Q$ q; D2 E& C% W- n+ x6 c
|
|