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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
1 p4 A3 j. T6 [8 @8 o+ ]

5 Z* I  }' \' S) g" W& j6 |! y7 B7 n! n7 h. g! A! G- M

! g9 ~4 z- w' X. t
% N  I" T* G5 E( y0 o( D" |. e. S7 ]
1  SPI+简介/ R9 N+ z; I2 @: n* r/ b

, K& C) [! b9 i' D  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。2 s# d, V+ y7 k( H5 n
7 m3 ^: I" Z) a. z! |1 d6 C
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
; P, f* l8 U! K9 x( \  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
& ^5 i2 @1 I0 c  M7 l4 ~0 b1 q: V! Y+ A5 j, R; Q
  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。- @( G. T, c& n) ~
  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
# d, w3 J( [, P4 J1 x2 E
/ n3 G0 r9 x, x4 W4 V2  硬件设计
3 u; ^3 }3 ^$ ~& ?2 u8 |8 Z, H' m7 k9 ^; S# V9 d
  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。- y, E* J- l) Z7 F- ^( b
9 Y7 O5 F$ q1 e+ k5 K
; X2 _1 N' g+ C2 x; A$ w
图 1. w7 g" i6 Z3 n# _$ I

& ?/ z! o5 g- o0 f& C" Y3  软件设计
( |0 ?: |; n1 l$ Q- N
- _# |) B2 _2 y* S$ [! T  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。, D, k( V6 t$ T/ O6 t/ F

( U- J! {6 C& c+ h- H6 S3 Q1 i' F. k+ n8 U8 _$ G7 G! Z

* \% D* S( Q. p% w 5 W6 S! u7 t+ P' v8 Q6 _4 H& K, g

. Y/ H) R$ ]5 E- j& z0 w' D4 J) d- N8 M# d+ |- M, R! F
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
8 F* v, X0 y% y
9 @1 C5 s! F" l$ `6 E2 t  然后,我们要进行的是对 SPI 接口的一个初始化。
/ N6 S# N) W- ]+ ^; S" j3 O  {9 j# K5 _  m1 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): r# \6 i3 ]6 e7 k; _
  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
: M" E$ `6 p; t! a  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。
5 i! e" Y/ x2 v- X( H" v( V* M* ?/ j  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。* k# }  _% i4 {0 K' J, W8 s  R% W
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。! A( f3 V" R& z; g: b& g7 \; L: ?
% Q% O2 N* _6 e) D  R1 w- H( i
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
5 ?# x' i! A/ Q3 @% [  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
  S% k& p% T! r0 ?3 {: G1 _3 Z+ s& t! e2 J5 R# v
  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:) r4 f% h/ @6 S2 L5 d% \6 e
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);' R7 G( y: z% D0 S
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
$ e1 Z- x0 v0 j" P* n4 @1 {! m9 G! k* _& O; l& n- b+ A
4  实验现象
5 b' r+ k+ W* v" S( Z6 T
$ E- n, S5 v) V  S4 [' S  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
; R# r; f2 n+ l0 m& y3 y& p3 s5 Z& m
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
/ W( k) g! V" G1 l4 z4 B
- r$ U8 ?% k) I  Z1 l  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
' h/ h% H/ P% _  (3)点击打开串口,4 是串口接收框。
2 t' g/ i! F! N1 l: V; i! C6 a' P  p: P. ~' J/ v* M
        ! ]( C* `- ]3 F
图 2
! s. z7 n7 }8 x5 Z6 N: n" J% d, q1 u: c/ M; c# ]# ]5 q
- K* P8 ]5 [6 g) ~: r
  配置完串口之后,打开我们提供的代码。
* e9 k8 k9 P  d; A+ T! c$ S. P# g( r* F& N% s
  (1)点击仿真按键。
" \: O( |  ]' M2 h3 `9 g1 l; U* }' G! L) K+ \
& z! R& V, m* L
图 37 ~9 p; a* @5 e( y4 n
  (2)点击运行代码。# V1 ?  z. O) j( b. y
6 G  R* a3 l. B: |2 }; j; d

( @- s# B7 `% @" U0 I图 4
" Y; i+ |* u  L/ I2 W  完成之后,就能看到串口调试助手接收框信息如下。
* h5 T4 ~- X& F: e9 i/ ~/ g: _8 T6 f1 S* a/ V4 ?. V" @9 O- w

' l' R, u# e# u, _# j0 o9 U7 F图 5
& ?1 |- m2 P4 Y8 i3 y& c- ]
5 [1 }, W- q/ \+ D& L! C' y3 Y! W

0 K( ~+ ]& q/ l" e3 ]0 W+ i( p# `5 ~6 v. b# w6 z

  T$ {& Z/ @4 j文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) & x1 p9 n& t9 {
$ S0 n9 @& v% a" m6 ]

# c+ {& V+ l) ]8 j1 B% f' ?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 13:29 , Processed in 0.156250 second(s), 27 queries , Gzip On.

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

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

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