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

【开发教程7】ARM功能手机-SPI教程

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
SPI教程
——疯壳·开发板系列

. t" C6 K, W  z
8 s3 c  `7 K+ R% @# ^( Y     
3 t& a+ P& y7 ^" O& e: A    图1
0 ~+ N1 d1 W1 Z, F7 S
4 |/ J# x( S6 V' v3 D" [) z, G
* t! a6 t: Z4 j    第一节SPI Flash硬件电路
9 N0 w( o& m4 c$ o' B$ q7 W& l2 c. Q2 A$ O- p4 B
    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:8 s) e  U. _4 E- S( z2 V& u/ J- K
7 Y1 V4 N& C4 R2 f2 ^! }, J
   6 b3 k! S) o/ G# C+ b8 t- w! `
    图2
* y3 ^2 Z  {  l; M9 ~% ?/ A) s; v
9 c, T6 {4 t- J' ^
1 Z, u5 b9 g- n: I, ~. p- [, e
. M9 O7 x8 I  ~+ l    第二节 SPI+寄存器7 D1 f5 o* F# r
' n; O$ w- P! e! [' |$ G
    2.1 SPI+介绍; P6 N: N" ]8 R1 z  w& `

1 X9 ?3 `% T, |* Z  ]    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
6 O& P  p# I% \( n: a, Q" o    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。
" T' u) a7 m: f2 L1 x' f% o" m$ w& k- t. h; l; H
    2.2 寄存器介绍% I5 S; H% B  r: W
    2.2.1 SPI控制寄存器0
" K& v- E  {& T1 Q( {. d  r2 r- b( l' S

1 b6 e8 L# p% N) L, g& r' v     + G; q9 \4 d% k  [4 z* ~
    图3
2 r. A/ K6 ^+ Y/ T( g( a    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;
1 T* R0 t1 o: W# S- c% x% K    14位:SPI中断使能位,’0’表示无效,’1’表示有效;
; M& y0 d+ n; g( Z2 @* u    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;: o: U3 U% D! L9 A
    12位:返回SPI_DI引脚的状态值;" _& R' }) w1 x* F, K- `
    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;' H# F: L: {% a* J, N0 {
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;
7 \/ B+ O+ y9 ^/ T    9位:‘0’正常操作,‘1’复位SPI;9 J) {0 e$ k( A3 }& d" t& z
    8:7位:SPI数据格式;; w9 Z5 ], {6 L3 l0 `, ~, m
    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;8 J8 G$ ~2 G: N) q
    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;
- j$ h1 U4 b9 U& ?( q2 H    4:3位:SPI在主模式下的时钟频率选择;0 f5 G3 o, h! @: [
    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;0 b9 w+ s% E6 x
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)
) L% w5 @! h" m+ `    0位:SPI的开关。
# t8 E: V4 s; l/ u7 D  C( l
  Q9 T7 U* e  O( G# r    2.2.2 SPI接收/发送寄存器01 N7 y: v5 u8 q
) g% i  |: b+ h8 n5 X* F! v
   8 i: R6 M, ?% p6 [3 W
    图4
# n8 `  G! d1 U    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。& t2 h& n+ M; o4 A# V3 X
" X! G& ~4 f; Y% K% v
    2.2.3 SPI接收/发送寄存器13 @* j7 r/ e7 N2 I- |4 t
5 I* U+ E" a0 t' t, w4 u' I5 s
   % t# U$ {8 D$ y" |9 k
    图5# P2 i5 Y8 x7 ^0 `
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。) ?! e$ x7 c, y# f

9 x3 w8 B: |) q! a1 c    2.2.4 SPI清除中断寄存器
' I9 k( F4 m' ~0 |$ X, }' }9 G/ _4 q# U# F
   
8 C4 v& |8 o: z* r6 @3 m9 F; a+ a    图6
+ P( _5 @2 j$ U- ^5 O0 n% E  p6 C    15:0位:写任意值到该寄存器清除SPI的中断标志。* v0 O& J# p- T  p; L" {

7 p0 h1 P* q& ]# O) r    2.2.5 SPI控制寄存器1# {2 Y* Y  L: W/ N: i5 P

4 l* t7 i* [$ R1 |3 m* ?! R , K+ ^- p' Z1 j8 b+ O
  , I2 {4 ~# p2 Y9 Y
    图7. X; m3 \- i1 z' M3 ~+ i$ }
    15:5位:保留不使用;
+ w+ _6 ?7 w6 i: l) j    4位:决定在9位模式下的第一位的值;
" X8 U3 o. `( D6 d1 {1 \1 P1 u% y5 T. H    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;; p1 ?0 f8 b7 c6 g3 h( K1 `
    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;1 x! W+ p# K; P* I; B$ o
    1:0位:SPI_FIFO模式。
' H7 B7 X6 n+ |* n6 R4 u* h5 Y* }2 a0 C6 E, g$ h
    2.3 寄存器配置讲解" y9 e5 c; [; B& i7 j/ b
    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)
. t' w# l" _9 c/ }    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200)
) [: a5 s: M+ j9 ^% D; ]    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202)
- {- j; r$ ~/ l$ s    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)
8 ^- n( X1 Q$ g    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)6 m3 @: [+ p1 T! ^1 S( O4 |
    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)8 \" X/ @) y8 F0 h& K' m* ]4 i5 b
    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;4 z5 t: A2 D3 z/ P' Q% a  U
    SPI的初始化配置寄存器:
0 r3 E4 b9 Y! h- ?: f7 m" Z+ A' ]# V    先关闭SPI, SPI_CTRL_REG =0x8000;
- b2 l% S+ T; Y* Y$ ~' h: w    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;" |( v* t* n9 N$ D& W
    开SPI, SPI_CTRL_REG | =0x0001;4 l9 p& m7 z/ X1 Z! [8 Y1 n
    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);9 X" }# b  D' T6 v9 c! V- o
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;) c' A) Q9 ?7 v
9 p% ?# s2 b+ J: M

' E7 d; J7 y. F9 s. @1 @
6 e( H2 O3 g1 ]+ ^: v0 T# W    第三节 SPI实验# j& s. g' O$ T+ C: A( {

6 y4 d& F  b% z    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
1 Y* x- m: z: {- z    使用USB转串模块连接手机蓝牙串口,连接方式如下:
. Y5 i8 Q. e2 e4 w# r; e        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
" K$ J4 Z2 P7 H6 V& ]9 j8 {
+ h& T" L, L( r    
' y1 z) M! m  b: r: Y! q# V    图8' j; v) L6 E$ j- ?
    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:
4 `) [7 B9 V6 b9 e* ^  d1 t  x) b6 U7 M: G, ^* ~& U  M  ^
     7 h2 Q% S/ F$ v6 U+ c5 S
    图97 q* _" _. Q5 z0 D! G5 \
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:$ n" H) I$ r& |9 A8 ~4 a) R
    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
; U; x; ^: l; b2 F" @% I
9 L0 D2 x' p2 s- G5 o    
, p& K1 p1 X/ Q8 R& t/ |* A    图105 n0 x* C- J1 ?/ R: T  Y$ \1 `
    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:
4 ~2 [$ o& y+ W+ x0 ?* v$ f$ U! P: j4 P! [, v; ?
   
( [) h! Q: P/ h    图119 [4 |" m; V3 p' V
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。" N! F- P' Y" ]5 X8 }& V
    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
5 ^& n! V# b* m/ U; c0 ]  a; c    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:
; b) D7 W2 K% l: e% l- X# |# Z% q+ ]' h- [
     
7 H! e, W6 |5 ~. k* \( |) z% t    图12  @; V& A  K4 O2 b4 O- {, F" v
    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:
2 _5 B' Y% t, k  n2 {5 |3 [  G
+ ~9 V3 C1 r1 \/ ~# g! f 5 a0 M( {* {) h' E& s6 h
' S  U! Y, y- l" v/ E
0 ?, t0 w: c4 z# @- N

  i1 D* f# L2 V) C2 B# B% L. F    
& K1 ]: e8 R& K8 P& W    图134 X- |2 q; t9 C

( l1 F! B$ B" q; k: l7 l- s' u. Y' z* @6 L) \% @

4 L+ \& |- {; _/ ]; q6 c, R4 g    配套资料:http://www.fengke.club
# e& @4 ]3 A! I3 y) T7 O, U# o    套件地址:http://shop115904315.taobao.com/
8 e4 }6 R9 |( U  w    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0)
0 C; o+ y+ ]$ B& P0 |" i  \; k+ q! L' x5 d  X* a
  • TA的每日心情
    开心
    2022-1-29 15:04
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-6-24 10:03 | 只看该作者
    在学校做过这种,嵌入式控制的感觉很有意思
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-23 21:37 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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