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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

* @7 m. b: ^8 l
) ]! [7 J" I0 K; p4 R2 b- P+ x; X# x. V5 \. i/ ^

6 M0 O( I1 b! Z" i2 g' J
" v  k* X9 M: |8 r% V. Y: V2 D/ J8 R0 I+ K5 S
1  SPI+简介
7 A. t1 Z" P& b* I0 W: @; s" v" q0 X* ]% W6 G2 E
  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。5 Z5 L; X) o; h: ~) Z

. {1 ]. e' }" m- k4 C  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。. Y6 k' R! \. W2 i: ^  J
  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
1 F+ Q$ }7 r9 {
1 ~4 D. O! u$ a7 H  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
* W8 t/ L& l% s- ]  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
7 o2 h$ i8 h. C" R1 @. ]. I" ]
2  硬件设计, Y0 e# i6 F, N! h( @7 q

1 [& C. v, I& E: ]  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。# j* I: \# z" w  x
( ?5 d1 E- x1 K/ o
( ~" ~) r3 E7 B5 k
图 1/ g' h; Q2 f- b0 W* C' T

8 }' s/ S# l9 P/ r5 H3  软件设计7 f4 x" R3 d4 V2 I, Q# Y+ A

6 _" U4 ?6 ^, N  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。, V8 l% Q9 E! l- ~
! z" `# i' G- {' P7 i
# S+ l- u$ i* I8 e  K# x
! i+ }6 y2 I' o( i; W+ O5 z
& S4 A( u9 y' v2 u; i" O+ p& t
. @0 Z- {6 q8 J$ F! k" O
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。, o, o1 Z( |; t- F; }

5 |. a7 F" [9 O" i& U2 c( W  然后,我们要进行的是对 SPI 接口的一个初始化。( C1 O, g- ~+ x* ?5 z. o
% P7 T. C" V6 O4 F- M  j7 N
  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)7 }  z! F) L/ `  e" `: ]0 c
  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
( T1 O0 c  E/ }3 f0 j* u  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。6 Q: ~$ P) L4 G6 F
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。+ w7 g/ R4 c, _  W4 R" t
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
+ Y, y1 I6 R/ ^6 h5 B+ ]. g7 g: Q3 a: e2 F+ ~( s, i
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
; X6 o  ^/ Q/ P, o* G% F9 U- ?  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
3 ^2 Q# f# [. c0 @- ?  j: E2 v# v
! U. P6 t6 U/ k. ^  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:% F7 o7 [, P/ [0 O* c) L0 h
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
3 X9 B6 B4 X( P, _  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
: x. b* U! k$ q( W7 E) i, O
8 ~; t* R2 m! ^) P4  实验现象
; u$ k( h$ N# a/ ?; ]! b! v; H" v: z4 y1 g% B- }
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。% _, b: b# }2 N
" b! V8 A: x' q
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。1 q& {! w7 \1 Y4 @2 D8 I' P

6 y. M4 a0 W; _8 W  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。. P9 {& w2 O) K; O
  (3)点击打开串口,4 是串口接收框。
- @8 d. t( y, Y" M% [' V7 V4 q: }7 B, h
        * w# K+ b  \" J, W4 B4 p4 w1 D
图 2* [  C8 r7 P5 n- t

2 I5 }# _7 w9 k/ c0 Y' u; {; q4 P0 h$ o" d; x
  配置完串口之后,打开我们提供的代码。
- R& [& T" v* W+ @; J$ t0 k, @; \$ [8 @/ A9 M
  (1)点击仿真按键。1 v7 [8 n1 B( U, _: t) _( G4 B

& r* u5 m) d* f% Q4 X
' t% u* \  a8 i2 L+ \% R6 N图 3) @* H6 |1 i3 J' ~4 F! a' j( n
  (2)点击运行代码。/ |) p* ]% ~. T- q

, b. K& ?  R( d3 a7 B+ s  C
5 k1 }- P4 g- D1 A# l6 l图 49 x" f& G) ?8 p, _( O: G! f  L
  完成之后,就能看到串口调试助手接收框信息如下。
2 D" K% c5 f2 f3 R0 X! N( {: c% S
8 p8 ^' k# e7 a5 X* T- K* k0 Y3 ]! I
图 5, a  t- `( ]5 L8 \! \! X% |4 {
5 V) Q* x8 x+ O  _2 I
* _, i& q. d3 e
$ w2 p2 A. n) }9 R8 H* [4 }; ]/ k
* E4 z+ f3 m' m- J, R
文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) + ?% E4 G9 \' v+ C3 J* f0 P

8 Q7 j4 T) a8 L  X: V6 x# V# j! z; |* H& n. x

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 01:57 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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