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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
" a+ ~) z5 b' c1 \+ ^

  t# |$ A1 o1 e
+ g& ~9 X5 _- g' x# ~) N8 h% S. u! ]+ q2 O/ Y
: t& L- Q6 p7 w4 |' ?! s
5 M9 x5 u. l+ d' Z! [+ b
1  SPI+简介
* H+ K4 ], U, N4 C8 n3 ^7 ]8 k
# d- F# S# u; I  |  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。# A( s3 M2 z% M- {
$ H% S- t! B7 @+ }2 r/ |- i0 G
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
! H( {" z9 f# v$ m1 A  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。8 x' l$ L1 k, x$ Y# |

9 \9 D3 m0 C! F4 T" s1 [( R- ~" o  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
, y# \: L2 J; f* H" d, p  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
; y$ x4 c3 Y+ b" p3 b7 f0 z6 G. q) _" F$ ?- [$ j1 Z+ j
2  硬件设计8 [) K- F; q3 b
* Z6 _1 K/ Z7 [: A+ R9 c; P2 n
  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。
4 k) m4 r" H$ B' ]/ |3 Y) E' }2 p0 Y) o+ ?3 L" z  T
( |( I0 g$ t' M
图 1
- s; C- ^( ^. @  u$ _  G. ]$ j* d8 _+ Q) e" J
3  软件设计
' ]0 ~2 j" }- e' O9 B( y
* g2 W- `' f- Q+ ~- J  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。% F4 p" I5 U$ a$ M$ {

3 y. Z% s' J3 B: m, F; |# W! \ & O2 F" O& @$ i+ w

  X* B/ K% z4 C+ n) w" N2 ]: f( ]7 x
2 V7 e, ^3 B( N  W# }" _
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。, i2 G& `( o) ^; G' g& B
$ U3 q3 Y4 y4 u( g6 k
  然后,我们要进行的是对 SPI 接口的一个初始化。' {: n! D# h; E/ w$ f0 G% C4 R- n$ s8 B

7 m) Q3 ?7 b7 j; I- h) V5 G  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)
* n0 b: w6 l% K& [  [  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。% ]' `/ V0 Z; \2 _3 j  L+ ^
  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。
0 I8 m' z% V" Z  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。( m+ v* i2 Q9 R; p' ?' M# O% R
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
, e( J  Y+ l5 i, C9 y$ r6 {4 [' u6 i# r  s
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
& ^( g( p& p9 x  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
7 j5 m" @0 H/ A; p3 H/ i2 Z% J' B  p! d0 R
  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:. R0 ]" U$ ?/ |& F
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);$ p% n& F. E7 j0 g0 q
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。7 \- w' V: f# ?2 d/ q
/ f5 K- u6 x& E$ M6 o9 Z) [3 A
4  实验现象
3 T9 I+ p7 f4 [% ]" \7 }% Y
' I+ b% I, S' G  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。# H9 f* z0 x$ ]: o9 L

+ T$ Z1 y3 w$ m" \4 m- h3 {  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。) {5 E- j" V6 M. I: x$ L, Z
8 U  M; Q- D1 z* |) k& g6 m* D
  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
0 Q$ R. r+ t- }  (3)点击打开串口,4 是串口接收框。9 L; p4 D% D6 c  O7 ^9 a4 e
$ J5 H+ A; P1 z
       
# v, j6 x/ Y( ~% v: m图 2
2 ~. \" c  @/ x6 {4 j1 i
# s) |' W" Y1 E/ V$ F# d2 G) U3 u. g7 p. G7 u) {. u
  配置完串口之后,打开我们提供的代码。
; _$ k2 B0 r" Z1 ?4 r2 C& k, [
# D- C5 c% T% p, I+ I4 X  (1)点击仿真按键。* h' C6 Q& Q' t" o1 {: X
$ M  T( y( S9 D! [9 v7 A

" V# l- ~, Z3 f) p- G2 ^1 F图 3
) X2 J; L7 q. ?6 ~) P: i6 g! l  (2)点击运行代码。/ x5 C3 A; u& i8 G  S$ X

" v7 c, [$ u$ o6 \& b% p' T9 g   S5 x2 `' e. G5 e' C( i
图 4
" Q! u& n# ^/ Y" C) ?) q- Y2 F- n  完成之后,就能看到串口调试助手接收框信息如下。
! v1 p. z$ S+ \/ g$ w; P
9 n% e& r- ?$ P! |# H4 c 7 {6 D* f% y9 [, t
图 5
! |1 x) h, a; b3 d  }) K# O$ D/ f- ]/ s; D" b/ ~6 n4 d$ Z9 _* g

: s' \$ ?+ h6 H+ k; s/ G* U
! ?0 |; S$ b4 f
$ w7 {: L+ _' U' c文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) ' Z9 w4 P. `' O* I. G; K

' F2 j; W; i" W, j
  `6 g5 o) t( a/ M) b7 i

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-22 09:15 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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