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

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-12 11:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写

* X3 R( z) }2 |/ r0 z0 ?% d) ]. Y  Q* B5 V
' o8 O4 K9 @# z: g+ ~

: e/ e/ T4 R% |9 w6 l
- ^7 A5 O) V4 ?$ }* Z, y- m) p( [* f1 X' \2 I( s$ x! U
1  SPI+简介# j" c; L  {8 b# }4 Z" d
2 G( p3 c/ K0 U+ U0 c  }$ P
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。& B: A/ v9 p; ]7 \5 B7 V( u

; ]2 i4 N" E6 Y1 i  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
6 D% g9 J+ P# S& S  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
! m# V& w( J1 k  B! h' R, X% E" {- Y3 ?" h; v) j
  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
, ^2 V: p/ V9 H5 K5 x  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。! o: @* @5 a( |; H$ e7 }

5 ~5 {$ Z0 b0 V; v. B9 b6 v2  硬件设计. a* c) k3 x" l/ U* G

6 J9 B- B/ q9 G9 G8 b" E6 K  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。8 v) w# h8 [" P6 ]$ M1 c' }+ a
3 `9 [+ U, C/ Y; l* W0 ?  T
1 r0 l' w' s: d( x7 Q
图 15 H3 d* |6 Z3 \9 @8 @! h

" p% F0 h; T; t' c. C3  软件设计! Q; a$ O8 B, Q. Q4 _
/ ^9 D( V1 X  R8 _4 K" A8 o
  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。. G& @/ o" l8 a0 X! _1 P) w5 N
) d: |! \& m4 D6 M  k6 v

) |: g! Y/ v. m; _; [" ~
% N5 v1 ~+ P0 i. A6 L# |& x8 B* n; [9 }# v
6 D! {* v) q# L3 ^
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。+ V5 J. P5 u7 `! H% C, W. R

- ]  X$ z5 c* A- m8 c7 d$ o  然后,我们要进行的是对 SPI 接口的一个初始化。
; J" y7 p7 Q) @
7 y6 W! ~! T) _  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)/ y$ F" P9 p0 U0 ~  Q
  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。4 a% b1 [. w# E  Z2 [- j
  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。
' @" k+ k7 V; D& n+ D4 ^, q  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。5 E# t+ d& h5 ?& |  N# U1 j
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
1 l% T: d' }# D5 _
! d0 \' \7 m% `; g( ^+ h' }$ W  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。6 i2 U/ h8 W4 \; ~4 ]8 Q7 [
  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
# Q% N  K% ^' d8 d5 ^+ r& o, @1 g* @; {. R! Q3 F$ u6 D
  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:' X% ^  }' @( ~+ Q* Q, W
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
& F# f4 b' M+ c+ `  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
8 `, M$ c2 v8 r7 G2 b7 B* Q. H0 S( r$ W. K* B- [% ~, v' \2 U) r
4  实验现象" Q- C, G/ y  \4 r7 V# H
" l2 q) X1 o. a4 p, I
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
4 z0 E( f. w  a  l8 p3 l: L0 C# K' n6 Y* B, D$ P6 ]8 ~* o; w5 \) A7 P
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。& b" }# z% d$ Y9 [% j& w

3 F. v7 }% V! e7 T, y' l4 [  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。& D1 E0 m9 ~  b
  (3)点击打开串口,4 是串口接收框。( B& V* L$ G9 c; D

3 i# H9 Y* E. A3 i' k% q4 b6 e        
8 W# r* Y% l& h' \; V8 l4 v  C: w图 2
! u! Y1 n8 y) ]  g' [! i3 [1 q( O& T$ Q; v/ P, {7 S

0 @" h6 `! w# T  Z+ w& E+ I7 P( K5 {  配置完串口之后,打开我们提供的代码。  g7 @2 L. ~( g5 P( g

9 ]& x! i% u$ G$ |9 U2 x' |0 [  (1)点击仿真按键。* }( T5 l" K6 @3 D/ W0 D, L
& @/ p9 q% e1 w' F$ ~
8 G8 q/ m# O1 t- ~* t
图 38 z7 s/ }& l2 _" F4 u' D
  (2)点击运行代码。
0 L1 r1 C$ u2 q) c! L/ A0 C" v: G
, F$ o- V, _/ R9 t0 V * ?; W  K/ R5 m: g( U) U
图 4
; B1 g$ \- K9 ^" v/ b& g  完成之后,就能看到串口调试助手接收框信息如下。
  j3 H; f6 B& ?
$ n% M: N8 w7 M" y4 ^ ( W* a; B. I: V- ?  P2 H+ H
图 5
# t* x* K4 r6 ?; m
) K1 K, D: N2 w/ i: Z" D% ]# A; s: i9 t2 Q& H$ F

& a  `  \# x6 q/ g( E8 X
; T" e* K9 W$ S) d4 R文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0)
1 X. V8 O8 u- {- L' I
+ H' w8 J' h# {; M" N) `9 X
" |5 ^" ^/ ^* p: }0 I0 [) o

该用户从未签到

2#
发表于 2022-8-17 18:42 | 只看该作者
还可以用在线仿真,在找问题的时候很方便,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-26 14:58 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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