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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 FutureX 于 2022-8-3 14:34 编辑
% w" u9 `+ g) u# Z; Y1 r
0 o0 e$ {  X$ E) q5 P9 Z
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写

( H+ r5 G$ j+ l$ p8 t* [1 H9 N" L8 W. h! o, q
' u* Q# A: }( x
! |, ?4 Y. k* K0 _/ H7 [3 j
1  SPI+简介
! m+ `7 k, \# b  Z) k
2 A7 f$ o- m, I. w1 V: a) q  ]  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
0 J* Q6 K5 t% D( G2 y8 v5 \" x: X# w
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
: n9 Q1 `) Q2 A& d, S3 a  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
7 `7 C* L  z, S$ k. j6 Y. V1 X
* Q* D# i( C0 S3 {  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
- ~* l  ?6 d9 R) n. `5 V+ U5 j; P  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。( C' f2 G* L9 Y4 e) Z

1 ^2 g! Y& E! f, }( r# ~) ~2  硬件设计
& B  @" w8 K& Q1 ?4 g
' e6 ]. f5 W0 I8 \* V& ?  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。$ l- x7 x- J8 _( c# @6 `  ~
7 f: g  x+ M) h% ]* T; V, H
1 T- N4 M; r- C4 m: R
图 1( s. e7 ~- n; {4 V+ @

( c' a1 V0 M2 O+ R7 b' O3  软件设计$ k* b1 c8 C; p

, y& Z6 N7 r5 U" E, T  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
3 s9 H; ]* u: S8 F0 k
1 j6 M: a1 B& H  z/ |& H0 ^  H6 ~* e5 v$ Z

$ Z, Z$ b$ P2 B+ T. f6 o' V" r0 A4 z. M9 g0 k5 ~" E0 x

. G% z1 ]+ c# A0 ^: C  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
+ n/ Q! s- J4 }" j; u$ P# k! _+ V, ?6 E2 W# S
  然后,我们要进行的是对 SPI 接口的一个初始化。
9 x5 Q) Q6 m- {) r& }# T; u% m: }; p/ p- b
  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)  Q7 S! G) C* H3 y! r; p; n
  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。
' Q) x# R8 `- s' k8 E3 y  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。$ B" B2 J( Y' H2 R
  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。$ r8 w2 d0 N; }: H4 E) \, G
  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。8 s  S! c6 I$ a( c4 }1 t- O
" X, y; r2 h/ R: m) D" {
  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
) s& r) B' B5 r/ Z  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。
- c6 |- L- Y2 s
& R% R3 ~2 F. d3 M9 X+ f3 m2 i  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:
# D8 h: o, C2 P9 y4 v  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);! P# ?2 n2 A, \2 J
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。* R1 f0 X+ Z% q- z4 t2 O1 p

( g* |( {, z4 e) g4  实验现象
3 |# u& y1 Z% W# c1 E. l& }% z& \2 a& B8 Y* Q; W' y( s# H
  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
; m6 r0 F! K. V6 G; R+ p* z
1 P. A: m( I) Y9 Y0 y8 D  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
9 D) I/ F7 ~. v* t. K
" q. J& V" [$ [8 F( D: {% L  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。0 k  W  E- `7 ?* w6 `( w
  (3)点击打开串口,4 是串口接收框。
7 }( [3 m: c+ p3 A* s" O
8 N$ ^  R; x! s0 `. X1 ^        8 e" r, O; w/ d0 g# N3 ]& e" d
图 2
6 s* R5 q/ ]" u( D; T; B4 y$ a) L- w: X- @

& i  A6 i. I! a# {) A9 S# B  配置完串口之后,打开我们提供的代码。+ O# H2 u. [# X4 h& P4 \+ e" u

) j7 b/ d. J: ]  (1)点击仿真按键。
) o+ f4 [- E( k( }( _3 p0 B8 q1 Y* A$ [

  Y( A3 }  b9 J& Y2 m图 37 k) Z+ h, b4 Q0 D, j
  (2)点击运行代码。
1 p, |4 I7 y- u) j3 U# ^1 J, {9 ^# M# ^7 y0 H; X0 s

$ p. r3 x. q5 z' v) j  ]) f图 4
5 p) ?/ L8 g% f5 u7 s) l" H% s  完成之后,就能看到串口调试助手接收框信息如下。
" c! D' }" U& x# H/ ], P9 M
0 U# U) T( i/ _3 E0 {, g: m% }# [9 i* q  @: f) e
图 5! R* E# K; E6 r* e: q, R% S
" {+ P# H; I3 Y/ P) ~, H
* }7 l- }* B# D7 ^2 ~/ N7 g+ w# E

1 Z: O" G- V; _/ }5 G' [2 M如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
6 [$ V! c5 t; _% J7 A# ~- g5 g! b+ j
2 D2 K! ^) m& y. P- `' U
文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0)
6 t* Q* ~+ B5 `$ |' p) }
; K+ p$ E5 T" K( ]8 N6 W( j, L: H
  f' Z9 y# u  D' q/ ?

该用户从未签到

2#
发表于 2022-8-2 17:24 | 只看该作者
图片呢?           3 l* o( |3 n8 b# N
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-22 02:28 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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