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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
* @/ ?$ u  i7 g1 i+ H) J4 [

8 w, d2 }$ J  H6 p2 n5 l' y& z* Z& v9 w2 C6 h% _, F

) v& a$ o# l: Q$ @3 F; O$ ~! L. M
" c- n! T. X# N) c& l# H) z% m! a* t5 P" H3 d
1  SPI+简介- D' p2 h# Z* i7 P
: @- c6 T. o% [6 ]. K1 O
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
3 S1 }) l2 O; c  l1 y) b' _" s& E2 T  t/ v/ }. N
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
: M* X4 D- `/ m  v$ Z5 q  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。5 }! D% H1 J; z
, \& |; {( U  H" ~! h+ l2 g
  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。1 F- O1 v5 t3 w& [  F% U2 M' a
  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
% C8 `5 D; E( z" B5 O. J4 }5 v$ S/ y& Q
2  硬件设计# j* \: ?3 Y' `9 R; v1 u! R* U

  r- K6 \) b; c+ U3 v& O9 w  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。8 H: X$ c4 H) `. J8 B: B8 m; s
# T# G5 _: A# `6 n( Q
  f" g# }, `. k3 C% v8 H' N& p
图 13 t# G3 o8 i9 m* L
- @# p. E. o8 p( I
3  软件设计
2 K+ p' q( }- Z  b6 R3 k4 C
& C/ X+ ]" N& E3 q& q7 n* ?4 t" |- I3 T  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
6 F4 x6 W, ?0 w2 n/ `+ q0 {7 \
6 a9 K3 [8 r6 W5 K+ K/ G
9 D* J- B: N9 _. V" r ' {9 p" R. s( e$ v$ ^
' p) ?* }- K$ i

. i) N7 R6 V- z3 z# a
" P% h& ~; `* ~$ O& O! C5 }  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。! B' C0 R. q/ p* c7 r. \) B

: }; h! x8 s* Q' m  然后,我们要进行的是对 SPI 接口的一个初始化。
* F2 |9 L1 h& I3 R5 b1 B( M7 O9 M9 v' a8 X  q* N% J4 D- Z8 L9 R
  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)
. W- T2 W9 q2 m( p0 C1 u  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。# P) d0 y9 e" f) q0 s7 I& e; a* R
  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。+ |+ V0 Q" q7 l9 K& @9 q+ X% D  h
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。
  ^; U. V, J# E, k9 q* h  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
! m* `2 B: y, a9 V2 H, c3 {9 C, y8 Q
) _- Y7 r6 y  {1 d0 Y; I. B4 Q  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。) `  G2 U  J$ h, P+ ~9 A
  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
! G: g2 `+ B! ^& ^. e- f3 L( V( F5 V: \4 e" [+ r6 Z
  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
2 Z( G# Q' \" q  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
' O$ D( G( e  T% |  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。% ~: G  \3 q# p4 U
2 j% L, _! P0 P* H( J
4  实验现象" E# M, Q) ^7 D4 M' v9 T
3 u% W: }* |; J) J$ c- ^  S
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。2 g" q- R) {/ t7 @/ J) V* [
. X4 W* Q" S- z( e! D  ]5 K3 p
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
" V# m5 X5 Y  u4 B+ F1 L( j& P# A2 y2 w1 v/ X* s$ ?
  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
/ V5 C+ ]( g4 s& I4 o  (3)点击打开串口,4 是串口接收框。
  }: q( n( M& q2 z4 d( K3 F0 ~: _% K8 d; {, L
          K+ x# r' ?: o* H& E3 t
图 27 k# x' j; j9 T- k6 D- b

" L0 ^3 R6 ^9 W
: |6 L8 g4 @- ?, I. B0 D6 T& }  配置完串口之后,打开我们提供的代码。
! x6 Y2 @: U. o/ l# [# d! b; N7 v, u7 I5 u  B. @* ~. Z3 n
  (1)点击仿真按键。
, W1 @# W; _5 l8 s4 a( T8 z/ q1 J& I" m( L

1 b- ^" u. N. ]8 c* v! [- S* G图 3
  R# P0 ]9 D% ?4 j5 k  (2)点击运行代码。( Z3 Z! @5 n' K

/ h+ q4 T4 g, F) c . @0 Q0 F" t% O0 f) \' G
图 4( X- v  i% ^: F- N: Z
  完成之后,就能看到串口调试助手接收框信息如下。
' O" a4 d' g& o- V, L
" S- X: H- O1 b; n$ a1 @$ c
& w4 d3 i! z2 r8 }1 ~图 5* A; t& n: t- Q" W1 Y$ s
$ o( R+ E& R$ f; k5 C. p
- R0 L* j( s, o

; F2 u% z& m8 {; Z  V
/ n7 @1 j- T$ `! Y: b  Q
' ^# d; b+ Z' u5 X2 ~: X, c: a文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0)
- b5 [/ z" W4 R1 c/ @5 @% Z0 Q  g
" Q0 h& H! F5 N# U* U8 W; Q( O
. J$ u& z- O( r; M
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 17:57 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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