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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
6 ~! g+ |  `$ @" S

+ j# l5 f* l- s& f+ l
4 D# w  g% z7 m) x/ j
3 s$ ?: h, V9 F. \7 e9 f
2 g! \+ r# P9 B
- f8 _8 T4 R" a, O, J; ]1  SPI+简介1 ~7 X. x* {, d: o! N) c5 Z; V
$ Y- Q5 _# T# B1 b
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。: u1 V# C: s- x' @

* _  |& i2 D1 L0 ?. L  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。8 I2 {7 u) H# B  I: A3 Z
  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。) |/ w. I- I' y

+ D2 W" \( c0 R) K. d4 K% B- M  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。5 t3 h4 C: ]  H3 |" c0 C& o& @- I
  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。- l5 T& E6 Y$ e' y+ L8 a$ Q( r

# ]8 |1 `  l1 L) X2  硬件设计' T( `% r( ?! x4 Q7 o) u

( X) r9 o& c/ B+ Y$ d( {  c  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。" I8 j/ v6 l) G2 C7 Q& g

2 z6 [1 n. |* }2 A; ^ / T. [" ]7 L) h: ^
图 14 h- ^1 M9 ^* q3 S$ _. b

) B4 t8 {' d2 c) P3  软件设计
: A# n' B  W" P3 U1 l0 e
! _: V  `) O7 ?) M  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
4 @  j. Y% j: r/ a! f' o; d7 }( }! h
+ _2 u5 I' G) i6 g+ j9 z5 O' c- y
; L! R0 F% [- c / {0 [8 U5 W' c, I4 F2 C2 _
9 o6 K% o6 t+ s6 l' `+ {$ {

! H" r& [) h7 f7 e* m& c! h) s
! V% O0 O+ X: J. C/ V6 {& o  K  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。) ?0 J1 |; g! }% j' b' t

* O( `+ e, C" z: H1 t% L. e7 d  然后,我们要进行的是对 SPI 接口的一个初始化。
) j! s/ c# v( n! G5 t( Z) j  y
" P4 F! G) H8 I  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)
& O  _# n! Z8 S+ H+ p- h  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
" y" I0 s! I. F4 \- s7 y  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。, v& O% p2 s) |/ P
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。2 P  h. d$ m1 f6 p; g0 o
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
& d' {; O0 O9 F3 g
3 f" b# [! |6 p2 v7 Q0 z0 t) m: n! l* V  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
5 l3 s/ S/ ?( r9 G) Z3 J$ g  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。: {' C3 `3 S( K% e

7 g$ V* T2 k/ n  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:# \9 @: q7 y& I' J9 }
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);$ H, m) v% J+ m% F
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。! Z. n  d$ Z3 q) ^, G
, v) D/ P$ @: L! ?) s
4  实验现象$ M( Z3 A2 p3 v+ C3 f2 M

8 d5 W. f" f1 V+ ?% ]2 p5 q* z  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
* ?9 n1 a1 k1 m$ r  E+ J1 L- q0 s5 Y3 G, k/ n! z! L, D
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
; C0 u/ J3 u4 z6 J2 Y
( w1 ]4 |% G3 z' @! i  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。: k% h- v4 ^1 Z, B# q. i
  (3)点击打开串口,4 是串口接收框。
! a' D* Y7 V/ o' K
; g, Q/ i9 Y: B) e- t        
3 I  n7 P' j# I( ~2 Z图 2; P% p8 `* z; A4 |2 ?2 y% `( B

: J, M! v& f) n& V( Z% L. g0 `: t6 W* P
  配置完串口之后,打开我们提供的代码。% ^0 p3 z7 Z2 I
7 Y* j: L$ f6 ]
  (1)点击仿真按键。; z) E" J& U1 m4 f
) h; o/ N( W2 ^7 o" l
8 ?3 p/ N7 a' }  O
图 3
$ c1 m# O- e, G$ S: k5 i  (2)点击运行代码。
5 X  O; G6 ]/ Q, K7 K5 t- r
( e8 q: k. W, Q8 ~! u , T& [5 D1 j. z* V4 q! k, Q
图 4# _$ B0 m. f# b. p1 X6 ]
  完成之后,就能看到串口调试助手接收框信息如下。
/ ^6 N% ]" W6 Y5 w  S
  S& z6 R0 m( q5 A" b6 u) N , y2 x, y: t5 M
图 56 H0 E, a0 v9 Z) j: Z8 S4 f6 |

( e* i9 o4 e1 ~! P( A2 H$ c2 D# E2 y. B7 a

2 o- F1 ?# i. ~4 S4 a( e3 l1 m2 t( P

6 U1 ?" j% Q4 ~, t5 T! z- b文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0)
# R* h: t7 g; r. w8 A( o* w% K, f/ C$ Y4 A, Y; U# Q- K9 o3 m; C/ j3 @6 `9 Y

/ a- m  J* c0 \8 w: v
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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