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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
& n+ ]7 k1 g+ I5 M' t: V! }' {

1 J3 v2 n7 n. F( e) S: i6 S' w$ }% H2 f* y5 q

6 j# _9 ~; K% C. G# J% N! s. s: J3 o/ {4 c

# Y8 X6 {% E6 B* U) g1  SPI+简介8 k4 U% U' {+ V3 o
, {$ g4 P) R9 g9 v
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。3 ], ~- _: Q/ i  t+ j0 @
9 y; P' }, ~& R4 q5 g" A5 q* e$ l
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。/ M: J+ ^1 w. J* B9 J
  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。1 e$ w- K4 B. x3 b
0 w  x3 ?2 B: r" e
  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
% k% z! Y& W* }. f* `( W* S) I9 p6 |  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。( A; ^5 j/ \- X; q

; i8 ~5 C# g( E" `6 t* w+ E) q/ z2  硬件设计  j" N3 X3 X) \7 U6 v7 [! g

& z( a! @+ Y4 E* e4 G$ E  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。2 @* L. [4 S) {2 R
8 B5 v" |: ]7 y: |: [" n) h
# U$ X) z. N; D" l! v- a
图 1
6 l& a  t2 z2 V, @+ `: Q6 H; u- x9 V  c" R+ }: g" Z
3  软件设计
; a) @& d* t9 B0 S) O+ n. r/ ?0 W5 ?+ D+ ~' p0 z6 K
  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。9 a% r; q5 g6 |/ @6 j5 M$ _1 P

$ Y% w1 `5 Q, ^: `
- ?* j/ j! g, y4 p . D% u1 `  y% ~2 i* }

, C: f% J% m  }0 m7 M0 y! y( Q$ m+ E2 j9 N7 K6 J
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。, U0 x. s# {* g7 [$ h- X# @: h
2 L! {$ O% V1 f# Q* d" N
  然后,我们要进行的是对 SPI 接口的一个初始化。
" j, U' b' a; w2 ^
, C3 ]; x% H9 ?% j; X  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)
, s' e: E8 W, P$ p' T3 _: t  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。* w( J! a+ p. g! }
  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。2 v/ |2 b. M' w% C( r3 z
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。) I; g: `6 k" a" Z
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。+ p- s* Q& k  j0 [  a

) h- H* A' f# g5 R3 J  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
4 c, O8 J$ }+ M* M# F8 ]  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
; }+ @4 K1 X- j
$ ?6 X2 I1 B" J! q6 L+ P+ Z# b' F: }  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
6 D3 D( O' O6 C- r  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);* z4 Q- T" D( u5 s4 ^  c6 u
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
( t9 y* t" O6 @( s- g& N) P9 s
2 a0 r8 ~( |0 B$ D; B; m9 x( B4  实验现象
. t8 s% C  q; F6 B. W) ]; v* [+ V8 B% }
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。5 T$ Q! b" M3 S. ]0 c! @2 g

% }" h! e4 ?" u) C  Y  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
# ~$ Q$ i) S; Y. o  B. p# z8 q8 g. M8 a3 ?6 J2 p
  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
$ S0 |2 y' z$ O+ |2 O2 i/ u  (3)点击打开串口,4 是串口接收框。. q) D0 Z7 c9 ~$ u' G' }9 I$ C, k
; c7 N% Q  A: x: `% Y* M# `
       
! _$ s1 Y: u, G0 V% S9 [0 k图 24 u/ {0 [! m# Q# t" n/ ^: P
4 M' H7 C5 w5 ]1 w" _) n4 A1 a
7 J& A( ~$ b+ t$ F' U
  配置完串口之后,打开我们提供的代码。# @& q0 ]! B1 Y2 Y1 x# Y& L
" `& w. k1 M  H- n8 u+ k
  (1)点击仿真按键。
0 c8 ^" y8 V0 q1 v4 M7 B. }! f9 H: {! [+ Q$ T( e
8 h! T* D3 H. e* |! _9 ?
图 3/ ?7 E: d' F+ l. ^7 M
  (2)点击运行代码。
& N+ r8 \3 p9 Y$ g3 v3 P* w/ C* Q6 X$ {$ h$ q+ J; d; p

2 L1 N% V6 K7 Y$ O7 \图 4
: Y4 d2 m1 @! R/ `9 P5 s  完成之后,就能看到串口调试助手接收框信息如下。* @' q% E0 B/ J3 b% A, Z

' {* @" d& x4 B0 K* \
6 G5 t/ z6 c! ?: R图 58 e$ }9 L# @1 [( ~7 E. o' T/ X
% b- q: F! i2 u* Z4 S; A$ G4 r4 C

5 t3 {! x' L/ |3 I; H
- e. g- [! q$ m: a
! u4 h) B- k- m. a  M文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) # W( V  f" r( l7 J1 H6 W

* ?9 x8 K6 z; }
( m- |7 V5 W2 E3 M6 X4 L* V3 p" W) M

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 05:14 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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