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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

  q0 j( G: Q/ P0 E, o2 f# ]$ a& V! p- l5 q3 k
0 U) z" [4 A& x2 l+ m9 ]0 S

$ |4 }% P$ F- V- ^+ N# @- K' O: L* c5 C) D

: |6 w/ E: W( n5 }1  SPI+简介
1 r! {5 g$ c2 s( [- }8 \
! x2 |" S) n6 W6 h9 n3 l5 b  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。; t/ j- Q8 r: w& _8 C% h8 N

1 J* A* S& w& Y% f0 t& T# N  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
! q4 e9 k; [. f  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。' v" W7 r9 s: L9 S: J9 }- o7 x

5 M9 t8 [; e  |  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。8 j( J# z- @  K8 @/ V( ~
  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
1 e4 d( ?9 v) n) }, g
* E" n& x- `+ g7 p$ ?2  硬件设计
! R; Z8 o/ \9 t9 s
  Y4 n$ @$ m2 Z* O( q  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。
' i# D+ z5 t2 @9 v9 O
! n% }" @5 z" G! q: X ! ~: }6 O/ ~9 `: |
图 1. v; D0 R- l# M. U

% T; e6 @5 V4 v6 z. T# l) N- M8 w3  软件设计% ]" q8 v( }5 P" e; O8 O

7 a' Q* F& g6 A; r. A1 _- }6 _: w7 s  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
! L0 Q6 @/ v8 M  X& H1 }5 j, \; C
, m( F$ X; u3 [
) W# L# I+ L! U; D# b: d ) L8 ?: T7 [' d$ i) \

  H! o' g. W2 n- {( v2 p# i0 Z
& p; E! o' Y  V" G8 c" C+ W! N  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。: A+ L/ l. M0 w8 L$ j  t) B/ p7 J

+ a( {- J) _, ]& G  然后,我们要进行的是对 SPI 接口的一个初始化。* }& v: w; B4 v7 N3 L
' Z: W0 J$ A/ D# h2 s; m3 Z
  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)
4 [4 p* Z6 z# y1 U2 N% O, X% m  k# K  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
! i+ n6 w$ I4 o/ h  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。' n7 ~! m0 F- K
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。: }6 G; e2 k4 H/ e- M. m
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
' O# n( F8 p& o% a( y- z
( x; j! A* p, C6 H& T" e- m8 L  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。, t$ k9 I- U7 E& m
  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
  {. j7 i& U- Q) n! Z# U
7 r$ Y+ W( t" e  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
# c: y. K" ]. Z7 Q  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);
# f9 l$ `# b. t" a! I6 s* ]  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。+ \' Q* M  B' E5 E: o
- Z! k' t' E  m( e# e- f; m8 g& u
4  实验现象0 I' T% @7 }* S) Q1 I& a

: {' z- F' Y4 N+ q  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。% L9 Y! Q) \4 Y+ o# h$ @6 _. W
9 D( e* Q& ], n4 T
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。% K1 d+ p! n3 ?8 d# T# w. R

, R8 _/ r: H/ I4 m1 z2 C  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。- f4 y9 M  K( ^; v& C9 L6 e; ]
  (3)点击打开串口,4 是串口接收框。8 ?7 ^/ v- ^6 k% e( d' Z0 G1 s+ f/ o' ]
6 P! ^! s  F' l% Z; R
        - t4 h6 P! i& g3 [
图 21 \" r# [* y8 |1 \$ @! m- Y

1 h2 z/ ~: c" d3 d% {% U; D1 ?( b( r& k+ t3 B3 h
  配置完串口之后,打开我们提供的代码。
$ I" m0 H  P3 _( E( {" ?; S$ ?% n- d
! q6 m+ l/ ?( y2 i# k$ c1 p7 s  (1)点击仿真按键。" a& M' n1 G6 K- t9 ?
2 J: X4 a3 Z, _& \' k  e1 p! g
" Q. G% k+ u: t
图 3
6 A9 J5 K' n5 [; z" _  (2)点击运行代码。
) z9 H. S9 v9 K  Q: u# J7 ?
; E4 b' T, M! j- \0 k
5 o% v+ v. Z& w图 4
8 y# q; [- x' }/ s. U  M5 x' {1 a' R8 K  完成之后,就能看到串口调试助手接收框信息如下。1 _* w( |/ N1 |; E+ Q9 A
; j1 c" z2 Z- h- G

7 B. h$ v  R+ o+ z图 5
: G8 L) n# e2 o) l8 u# P! q: y5 W1 \( P) ]3 e1 L3 W
; c+ \4 B# r5 m
: w, ~% G8 k  D

9 D! M- q, }4 S) d+ N文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) 0 Y, h7 ~/ i5 G2 w* A4 h

$ x  G" O9 y8 [6 }( n" o* o+ Q( H$ m, f; V) b

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-28 19:50 , Processed in 0.187500 second(s), 27 queries , Gzip On.

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

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

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