找回密码
 注册
关于网站域名变更的通知
查看: 61|回复: 0
打印 上一主题 下一主题

【开发教程4】疯壳·开源蓝牙心率防水运动手环-外部 Flash 读写

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-25 14:20 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
' K5 ^2 ], t" H4 F4 |# g

; \6 C9 [0 n3 f& L1 C! R; o7 I2 ~- Z6 A" M+ L# u4 Y4 L6 Z9 Y: i
; S( u+ w0 L. J0 F8 u" w! a
3 |6 ^) T4 s* m4 S* ?

/ |) b! ?, g' |1 Z5 ?1  SPI+简介
+ u% [; ]: |$ d8 z' v$ U: i0 y5 \7 D( c0 `! a, \- X1 L
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
5 |0 T* s& S9 o# f# W- L0 b& p1 ]: |% C$ o6 J% P% n/ g9 Y
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。7 o& V( O/ Z& j, ], ~
  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
2 c6 B$ G" l9 c  C% r, @
0 H& G: y* F% F7 v1 k0 y  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。+ D# V) V5 T5 R4 g' `! f4 r
  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
9 s4 s- {, D  S7 H9 Z. L2 v6 d7 m7 ^/ N# A  o
2  硬件设计% h) I* `4 Z$ y! u# M
) g5 e! s8 n- G5 O
  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。. F. t( \4 b7 Z7 y1 V2 {1 ^( ~# z, ~

1 J3 ?4 T3 o. r3 n
; w# P; ~3 v5 y, G' _( B# |4 h$ R" n图 15 ?! q8 J) p4 r5 B
! ?  l, N, {9 G. M; D# s
3  软件设计
+ k0 d8 a; [2 b$ Z5 V) r* C: z/ a# c, Y+ K' W3 [7 G/ r
  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
3 S' @# k$ n. N, _
2 Y% q& N0 C$ ~
, E9 e' z- u. J; r  q9 h
/ t, d' z- b' V
7 \5 g( c1 Y4 X& h% s
: @6 ~  Y" ?& M1 P# k) @
9 |" H4 }6 [7 k4 D9 ^  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。" i+ I% Z$ B* q

2 y5 `0 {0 q; r1 h/ a  然后,我们要进行的是对 SPI 接口的一个初始化。
! t- F8 b4 G& W* ]% j8 ]
- g% ?, r" U' ~% Y( _  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)
" |7 Q+ e1 m; `" q4 G& K8 N2 ~1 \  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
, b' M- a8 ]$ M7 S# U/ t5 J  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。* g8 }0 j2 k& A/ b: P
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。! L7 u2 N& n5 @2 R  H) T9 R1 @
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
: @3 t/ S+ y- e+ a* w* k; m/ d6 ^( l9 Z8 u
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。/ H' ?8 \( |6 b6 X0 ?
  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
) K2 S0 E( X2 Y) ?6 C' F# t( L
- \: T5 H0 p" j3 \: e3 R7 W0 \9 N  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
9 u& j9 b" N* y  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);6 J2 v3 V( _' x, Z
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
5 M- l1 N7 T8 N! K5 \) O4 S+ u$ {& h" r. u" |
4  实验现象/ ?$ s4 n, Z- ]3 q- x0 H8 h, l

& Y* P, Z% |$ K) X6 k  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
  C: p5 c/ N2 @9 J
" j( ~8 X7 m; z  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
+ v6 P5 F* A' u) R* ]; h% v& |
# H* |5 V) e- y# a4 {# u* n  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。. h5 `2 H2 q8 H1 ?
  (3)点击打开串口,4 是串口接收框。
6 m& [$ p7 x3 |# q! h* w2 ]+ X5 \: S, A2 K8 a" m1 i' v5 o
       
( m! N6 c0 p4 t0 Y9 {( s7 B6 b& V$ R图 2% s: ?5 N; M( ?+ \8 f
1 K3 S1 U4 X5 A6 M: [

; i+ }. g" `9 D6 X  @" R( b  配置完串口之后,打开我们提供的代码。
1 }8 n6 w& N) v& X3 m, ?0 g7 y
3 _  Y9 u4 L& C# ?( n  (1)点击仿真按键。4 ^; h& K9 j- O0 x; ]2 k
- f) s. L4 `0 X% }* E1 m6 G+ S( ?
( B' f4 P( Z: J3 v. T1 y
图 3  R" Q. k9 V. S1 I
  (2)点击运行代码。4 K. B* i* d: Q/ V4 b
& s0 S  C: w6 \) e* j0 \5 L) `/ U
) i! z5 g! @6 t
图 4! I& u4 t: Y/ ~3 v3 t; @
  完成之后,就能看到串口调试助手接收框信息如下。
) y" j- Y2 O6 J* s+ H: W# G
; ~3 Y2 `" J. w4 c: d) q
: ~( Q8 n7 m! G; N图 5
1 d- k, X6 e% W/ K" J( ?: w6 ?& O7 T1 o) j1 u& ], _
# t6 E& U" }* A" U) |4 y8 P2 h! a* o
1 [- i% ?" s: u

0 Z+ \$ G& T; ]: H  f( W6 J9 v) l9 S7 w- R7 l1 A
文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) * x( o( A( }) c4 E# F

1 A* ?7 x8 O. v  b: }! E7 N8 f% r3 }1 R5 t& V
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 18:26 , Processed in 0.171875 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表