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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

, d7 a  G, p7 E) n' ]4 q+ d( O+ ?- p2 d
) v- d7 \5 v& }1 N+ m0 W

6 ~% R/ n1 Z7 J; J3 u6 p0 ]
" W  H4 F. u, n: D% u6 d1  SPI+简介
9 A# k) V* _8 T: R% ^' ]2 h% n2 ^! d: j, x; q$ \- ^
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。3 K0 h! F) J0 U# T! U# v! T) u
) }2 S1 a" P; R( b9 N
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
4 h5 e0 Z! X- B) y2 ?" R  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。% y7 _5 _8 g2 }) \1 q0 R

0 n0 v- W9 @' q8 Y- J  k+ M6 w  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。( G- B$ v) `' T
  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
! t, B4 o( ]1 S
0 l( y7 V* G- [) o2  硬件设计
& \/ f" }+ W: G) t  k" e( p3 c1 H* t
  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。0 c% S; r4 [) L, l7 n

: C( M% R% |" |2 h( m  R
. L& ^1 J" ^- `图 1; E1 T  V6 N0 P2 s

6 b, q8 V3 G1 ~# }2 e6 _1 n) _3  软件设计
- t& E1 i8 v/ ]0 ]
8 Y' a- Y1 w. q  G2 X+ Z3 U  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
. t% e. z1 e, f* s6 q
; D9 R# r: U  x8 X' V, D; _; K; r6 B! B; U, i. }- Q- X6 N; N

% q7 b7 z8 |' T: m
' s) N( b+ W0 u! ?3 ]) h" p3 O: d5 s0 r' X* {8 A6 V
' G# f0 t0 v3 Q+ e9 F
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。6 _* U. J4 P/ a, o! }: k

% M' _2 p: U* e  然后,我们要进行的是对 SPI 接口的一个初始化。6 k/ @, h) G! K( V9 f

! V5 Y5 C" c( H% U, v' h2 C% V  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)0 N8 u; Y" b) G. Y' ~$ s5 n" N0 f$ O
  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
; M( }4 e  `7 R  o8 \' \8 r  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。/ ]( X8 c/ A, ~2 S3 z7 D
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。
& e& A/ N: ~7 z; j: B; ^, k  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。5 D" m1 F+ r) A" P
0 V) ?# l: Y" u( J. I
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。* C3 R9 w' ]/ J  |
  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
% w; ?8 U- t9 T8 B  M$ a0 N% }2 T
  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
/ g+ A5 m1 T6 C, {  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
7 _7 d+ ?- j) B  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
" G% ?, _% p3 @$ x+ J/ ~% a  J6 }( _7 z, e
4  实验现象
( M1 Q, s* @' q3 W7 `" n/ N% l  P$ `
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。5 r- r; m/ c+ Q2 w! e- X" B& V
; [( O' Q- N2 `3 K6 F8 J
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
3 P3 g+ U5 D% p# t6 G5 Z8 i8 ~7 x" z+ D. |
  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。. S& Q  h6 y7 N' G  Z1 ^2 Y; T
  (3)点击打开串口,4 是串口接收框。
7 ?* Z- `; p1 c1 Y4 E5 `( Y  _1 A- t8 c( m+ `9 d
        7 n8 n& O, n8 U% C' z8 ]
图 2
! n& W$ y8 j) V, _; O
0 P) r( ~% V3 J" s
: o, W* g  L- Y+ ?: W. j' D  配置完串口之后,打开我们提供的代码。
1 q5 H5 v2 R$ I! [9 y1 T- Z4 o% W
  (1)点击仿真按键。, e2 P0 y$ Y" f2 T* H
9 {; ?; D4 U7 ]& q1 `, ]0 D" O

) A1 N, q9 M, m2 |5 c6 }: i图 3( B5 y, |3 J1 K% l3 p, R
  (2)点击运行代码。4 I1 B( u7 `; f# Q
4 Q) n0 O3 d  F1 T) R
" F/ C; _* L9 `  |9 D% U
图 4
, G: h3 W0 Q" c# O9 i+ N  完成之后,就能看到串口调试助手接收框信息如下。
- f9 U# \$ R  J0 [. s8 P- |3 u( P
2 p1 @3 u. X1 [: y) _8 W
图 5
9 ]/ X* ~4 o2 j
1 C% M: {; S1 h" a7 n4 T' Q9 h) ^1 Q7 N8 s" z
9 b) Y) W  H/ |9 ?* A' l9 f4 o# S

6 _2 w4 w* L( m) e0 O. v
  h# \7 ?4 c0 `; p# o! D# s文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) - }) w8 D( M+ y# I; N

/ H3 `5 ^) c% y: w
. h5 J1 y& S! s9 g# m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-31 04:57 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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