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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 FutureX 于 2022-8-3 14:34 编辑
+ w. s( [. b4 m/ b2 p& h: X( T# h) G1 F% P' i5 b* T
开源蓝牙心率防水运动手环
——疯壳·智能穿戴开发系列
外部 Flash 读写
" F4 n. s) [- J  B- O

7 T; C* B, n4 m0 A% x! c# Y
. X& _5 L& [! |8 R, @2 q7 \; V# s- H" j  [! {3 @! @
1  SPI+简介
7 m: @5 g3 y8 w& X
; K1 b, {: N" m2 g$ D/ e: ]  本节中,我们将使用 DA14580 自带的 SPI+来进行对外部 Flash 的读写操作。
, n% D0 @8 G% g" M" P" N* ^; x; s" u" |" }& v- S( |3 [; y
  SPI(Serial Peripheral inteRFace),串行外围设备接口,是是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI 接口主要应用在EEPROM、FLASH、实时时钟、AD 转换器,还有数字信号处理器和数字信号解码器之间。
0 j$ S$ a6 s! t3 o) Q+ |% q& {# x, n  该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 NSS。
0 c! }3 ^% k$ g/ @/ n2 ], ]( f: m4 c9 Q  d
  我们 DA14580 的这个 SPI+接口支持 SPI 总线的一个子集。这个串行接口在主/从模式可以发送和接受 8、16 或 32 位,并且在主模式可以发送 9 位。SPI+接口有双向的 2*16 位字的 FIFO,功能得到了增强。
( B7 a  o' w' b% g, |  我们这个接口可以工作在主或从模式;有 8、9、16、32 位的操作方式;SPI 控制器的时钟达到 16MHz,SPI 时钟源可以通过编程进行 1、2、4、8 分频;SPI 的时钟线达到 8MHz;支持 SPI 的 0、1、2、3 四种工作模式;SPI——DO 的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。* y( v* P0 e1 d

) g  q& i! j" J  d! A  ~& }2  硬件设计! J' M3 E$ C! q' z& ?

* D2 C  A8 {* J5 f6 U  本次我们所使用的外部 Flash 是 W25X20CL,它一共有 8 个引脚。1 号引脚 CS用于芯片的选择。2 号引脚 DO 是数据输出引脚。3 号引脚 WP 是写保护。4 号是GND。5 号 DIO 引脚既可以作为数据输入,也可以作为数据输出。6 脚 CLK 是 Flash的串行时钟信号。第 7 脚用于暂停 SPI 的通信。最后 VCC 就是电源脚。8 o- t6 G) G$ L2 m9 t- M

; ]/ m: ?0 G0 z4 q  G/ b
8 ~, E" V* F$ g: L' h图 1
" A% k9 t/ ]! p! H, Y8 E4 d4 _
1 e1 l. @( P2 u' h& g/ t3  软件设计  p! \* s" y! `  @
5 D* _" H0 ~# z2 x
  要通过 SPI 进行对外部 Flash 的读写操作,我们首先是进行相关时钟引脚的配置,也就是下面的函数 periph_init()。
- b4 Q! Y9 L  j- x4 T7 c9 B+ U) ?3 n; ^" l' S& w: D$ `

3 }4 i- ~2 l) h0 m. ^8 v* C; N' K, V. v' N" x9 `5 u

8 ?% i4 n3 D3 z6 |( i( l7 [: r- }9 W; V2 M& ?6 ]
  在 periph_init()中,我们完成了 SPI,uart2 的管脚配置,以及对串口 2 进行初始化。
- a3 f. Q$ s8 r- l% B7 V" `. a* U+ g) f+ e4 Q! ?! E/ _  l6 J5 m; y
  然后,我们要进行的是对 SPI 接口的一个初始化。
8 r/ H& g- _+ s+ y- G7 I
- W2 W2 n* ^3 F  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)
9 Z6 f- a( l1 k9 q' i  第一个参数 cs_pad_param 是分配给 SPI CS 信号的端口管脚,我们这里用的是 0.3 脚。6 `' ?+ H0 _" m/ K! s8 C# n
  第二个参数bitmode 是 SPI 操作的位数,有 8.9.16.32 位操作模式,我们这里用的 8 位,所以填写 SPI_MODE_8BIT。
3 c' W# F( a, X  Q) k  第三个参数 role 是用来配置我们 SPI 的工作方式,我们这里用的是主 SPI,因此选择 SPI_ROLE_MASTER。
9 L5 w8 X( J9 n0 N1 z$ @  第 四 个 参 数 clk_pol 是 用 来 选 择 SPI 时 钟 空 闲 极 性 , 我 们 用 的 是SPI_CLK_IDLE_POL_LOW,表示串行同步时钟的空闲状态为低电平。
6 J+ C. I" P' y, B+ A' P
" j5 V, c1 @7 B0 T" i+ A8 f  参数 pha_mode 是选择 SPI 的采样边沿,我们这里选的是 SPI_PHA_MODE_0。
) D5 P( }0 }/ D0 L9 h  最后两个参数 irq 和 freq 分别是用来配置 SPI 中断和时钟分频。我们选择SPI_MINT_DISABLE 和 SPI_XTAL_DIV_8。( D* _- D' u7 W& M+ m
% M) ~. z/ T+ N% v8 c( a. A
  以上是我们对 SPI 的初始化设置,当然,大家也可以根据自己的需求进行配置。对 SPI 初始化设置完成之后,我们就可以开始读写外部 Flash 了,通过调用:) [+ U' O0 _' M: [2 I
  int32_t spi_flash_write_data (uint8_t *wr_data_ptr, uint32_t address, uint32_t size);3 Y& T5 q/ y, X8 m
  int32_t spi_flash_read_data (uint8_t *rd_data_ptr, uint32_t address, uint32_tsize)。
- @: t0 w- E/ |1 r( P3 \4 s- t7 I4 O$ X$ n0 ?, J6 D
4  实验现象
1 f4 N% r  }8 s0 x- J
: o! t0 F9 n! z9 m6 v' U6 [& t  首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
+ x- K8 L& [0 @2 e3 x4 e7 j+ z9 }) l) ?9 s$ x# f* t) o9 k) n
  (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。) {* s8 w6 x! }% M* E1 l1 w/ S: h

$ j+ G0 c$ S% X( f' v/ c6 s  (2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
7 r8 w8 ?: Y' q# k3 Y' I  (3)点击打开串口,4 是串口接收框。9 I: s8 V; W2 n' r
0 V' c# k  W' n$ z& h, O& Y
        
* j  q+ k! y# B: |  a6 S& A图 2* A, r7 U! `  l2 T: x1 ^, A* x

; E; Q% {# X5 ], j' D$ h" B/ p* ~1 N( C9 I# ?# W% K
  配置完串口之后,打开我们提供的代码。
) t1 n/ l3 Q$ H4 R
0 {: t7 b, [; L1 N/ _" p  (1)点击仿真按键。
# h3 i0 u9 z6 w. I
+ I# Y( F  J8 Q9 b4 T2 K- y
7 g" J% S) Q$ V* J: @5 J图 3
: u' e( _6 I5 s; y1 S" x9 Y  (2)点击运行代码。9 n' o0 Y5 R& ?6 Z
0 B: e0 P/ k1 z. V, ~6 p3 R! @

( t4 B3 E5 C" M8 m2 E7 v图 4( h. J2 X- U* h) I$ z7 A. D
  完成之后,就能看到串口调试助手接收框信息如下。! @. {2 \6 s9 \; V8 q

; I0 e* h; m1 y: O; _7 }- @
" R2 j* i- X$ y- [图 5: N- q  X% @- ~  r$ w7 w1 n% q
+ q$ m! c4 B' W" T

; x7 I& D. J& S
9 ]+ X. Q5 s! d: [如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系( i. O$ e7 O9 t. d; ~: b) y3 G

4 [0 R9 @3 u  q& d
. O. P4 D; V. p文件下载请点击: 2_(100%开源)蓝牙心率防水运动手环_外部Flash读写.pdf (727.79 KB, 下载次数: 0) 2 Q8 {1 A/ `# Z% V+ z
! c% B+ I. d6 F3 @8 h
! s8 T& @4 T2 i8 p0 K* O: q+ V" e

该用户从未签到

2#
发表于 2022-8-2 17:24 | 只看该作者
图片呢?           
9 S1 T7 c. W  y" ?7 H
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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