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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

. D, V8 y8 X' C+ s) W9 C/ m3 i: i) i* `$ F/ z7 k/ l
     ) V5 b- u+ D" t, E# z+ G' q
    图1
# A9 E0 `8 X- k  N& m* P) R
' h( Z# T% G0 r: x  b3 z! o/ J8 A$ o. m7 k
    第一节SPI Flash硬件电路" A$ r3 N# E( k4 k

8 q" g: a$ q# t2 h+ {( _- b    SPI_Flash可用于存储程序以及一些数据,如果需要存储程序则必须连接在规定的引脚,开发板上选用的mcu引脚分别为:P00,P03,P05,P06,如下图所示:
" k: {; R1 I, K' g' O. @# Y
0 f4 x  J: V6 u& l2 n    * c, }8 Z* `2 j" X% z
    图2
9 j; @, G( d0 r& |( p$ |/ }! j
2 ~/ q. ^* w; A& s
6 Y% p, \0 P- W9 `& @5 `  `3 H8 D, u
9 `- s+ u, k; v- H    第二节 SPI+寄存器4 F  p( }% w9 T( ^' y

5 H4 S* \7 f; N& t. J' d    2.1 SPI+介绍! \2 e& ?3 K/ }1 P

/ z" a% q4 E2 {9 X1 l    这个接口支持SPI总线的一个子集。这个串行接口在主/从模式可以发送和接收8、16或32位,并且在主模式可以发送9位。SPI+接口有双向的2×16位字的FIFO,功能得到了增强。
: Q  w6 B  N/ S9 N6 M& l    该接口可以工作在主或从模式;有8、9、16、32位的操作方式;SPI控制器的时钟达到16MHz,SPI时钟源可以通过编程进行1、2、4、8分频;SPI的时钟线达到8MHz;支持SPI的0、1、2、3四种工作模式;SPI_DO的空闲电平可以通过编程设置;可屏蔽的中断发生器;单向读和写模式降低总线负载。1 e- E: B) h# K; @" O
: W4 F& F- G1 h* d7 l
    2.2 寄存器介绍
, i7 U- {1 l6 ?5 s% c6 Y    2.2.1 SPI控制寄存器0; F* K1 t9 Y# [: a9 r
- E7 H& d2 q" J4 _
" M2 v* q7 T  w3 V
   
2 Q- J1 ?. R* N# u: e' u$ ?    图3$ f  [8 S: V2 U+ w
    15位:SPI_EN引脚是否有效,’0’表示无效,’1’表示有效;4 h* p" h0 B/ b% [( v! l( f/ h
    14位:SPI中断使能位,’0’表示无效,’1’表示有效;' E* P# s9 D# y0 Y
    13位:’0’表示接收寄存器或FIFO为空,’1’表示SPI中断,数据已经被发送或接收,该位必须通过软件写SPI_CLR_INT_REG清零;; C( h# w; b2 w9 x3 \$ W
    12位:返回SPI_DI引脚的状态值;
  e+ @7 D! f8 {% T) [    11位:‘0’表示发送FIFO满,‘1’表示发送FIFO空;0 |# g# ]/ W, v/ o
    10位:‘0’正常模式,‘1’使SPIDO的值等于SPI_DO的值;, k4 p0 j% x/ q/ g* B& d
    9位:‘0’正常操作,‘1’复位SPI;
) c$ I" w3 Y) }  e  f    8:7位:SPI数据格式;8 p9 U' M9 y2 V; m/ O8 g0 j
    6位:SPI工作模式,‘0’为主设备,‘1’为从设备;
& Y: y* _8 D# B- ]" O7 [9 [    5位:当SPI处于空闲模式或者当SPI_FORCE_DO=1时引脚SPI_DO的值;6 F7 i" q# l5 Y! p6 u7 F. b
    4:3位:SPI在主模式下的时钟频率选择;
1 s- H: ]5 u4 m    2位:SPI时钟初始电平的高低,‘0’为低,‘1’为高;5 e7 M' |2 Y9 e3 Y% N
    1位:SPI时钟的相位选择,具体看SPI的时序图;(SPI的资料)) f2 q1 Q/ G, J: O! q9 ?
    0位:SPI的开关。
) S: h8 C4 L7 q
" \' ^9 B8 K* W. |    2.2.2 SPI接收/发送寄存器07 }- L& b! e4 P! M2 [! t
7 x4 r' i9 r3 x" U7 i( p* s
   
( t7 C5 T0 J: B    图4, Y3 t. |, F' J0 D: k: F
    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据。. b$ T( v' P1 s5 R
. C& ]. M0 w) I) I: G
    2.2.3 SPI接收/发送寄存器13 D- u9 i7 t1 r% ^  @

7 k5 {+ r/ P/ n4 F% f    . ^9 D: ^, G& g  ]6 s
    图5
) B* F* a2 ]/ H# U. S    15:0位:SPI发送或接收的数据,写操作是,存储发送的数据,读操作时,为接收到的数据;为32位模式的高16位数据。" h; E9 v- g; T, [4 `

% v$ }) |: [4 c# h9 K    2.2.4 SPI清除中断寄存器* @+ v- J% M0 S$ s3 p

% U# |+ n* p; j- l' n1 ~    
' l) m! R# Y( q- J2 p0 r' i    图6+ |! Y% o: L- \3 f- w9 I6 c7 ?
    15:0位:写任意值到该寄存器清除SPI的中断标志。0 R8 k0 C& M. i
: x3 V4 y5 V0 d- t
    2.2.5 SPI控制寄存器1
4 u8 I8 E9 w. D; R% U# g$ B
) e9 c- [* t+ |. q* ^; Z" \: w  f
$ y; o; f# m6 v, t   7 c) M1 y6 u$ ^
    图7
8 J" V- q0 ]  K( d0 J8 l    15:5位:保留不使用;
' E& D/ ?) W, ?/ u0 T0 j% e    4位:决定在9位模式下的第一位的值;' q/ ?0 |2 e. G9 [
    3位:SPI忙标志位,‘0’表示SPI空闲,‘1’表示SPI忙;4 k) y% f/ W% o5 I0 s
    2位:SPI优先级选择位,‘0’低优先级,‘1’高优先级;0 ^7 w. _3 k6 W% A
    1:0位:SPI_FIFO模式。# x4 h- t' R% z
3 O6 X% G4 [% ?  E
    2.3 寄存器配置讲解6 Q. n# [  f$ O4 n; e# M
    #define CLK_PER_REG                (* ( volatile uint16*)0x50000004)) Z7 h0 a. Z/ t, @* F
    #define SPI_CTRL_REG                (* ( volatile uint16*)0x50001200), B: J- s2 J4 P) o4 c( v
    #define SPI_RX_TX_REG0              (* ( volatile uint16*)0x50001202); i5 J6 g# V% ~& M2 h6 W
    #define SPI_RX_TX_REG1              (* ( volatile uint16*)0x50001204)3 {, k4 a0 c/ t4 d8 N
    #define SPI_CLEAR_INT_REG           (* ( volatile uint16*)0x50001206)
- |, h1 ~  n) m7 ]( [% ]8 t    #define SPI_CTRL_REG1               (* ( volatile uint16*)0x50001208)* z9 k( n$ m* y, M/ |
    启动SPI模块的时钟:CLK_PER_REG |= 0x0800;
# y: t8 p& n0 \9 j! c; a0 z# [: H0 R    SPI的初始化配置寄存器:8 ?9 M- L/ e3 c2 C2 b/ ]3 s9 B
    先关闭SPI, SPI_CTRL_REG =0x8000;8 c3 H2 p( S, \' n: U6 S
    SPI配置为8位模式,主模式,时钟空闲为低电平,相位模式0,关闭SPI中断,时钟8分频(0x1000000000000000),则SPI_CTRL_REG =0x8000;
: {6 l( }) K+ ?% K; W3 q3 r9 E& F! }    开SPI, SPI_CTRL_REG | =0x0001;
6 N* D2 i6 U3 Q4 H    发送一个字节0x55,将数据填充进发送寄存器SPI_RX_TX_REG0 = 0x55;等待发送寄存器为空while(SPI_CTRL_REG&0x2000);5 v3 E6 D6 \& r
    接收一个字节,读取接收寄存器rx_data = SPI_RX_TX_REG;/ p( R' Z  \9 [) O; G+ e* k

7 N9 i, b0 S. V& Y8 o& z& Y8 ~3 O0 h/ N( B* a5 z

8 D7 x2 X0 ^6 H, N    第三节 SPI实验
1 {& E7 k2 q' Z5 p% c
: M% R/ n5 h3 q, m    实验需要使用的模块有:手机开发板底板,Jlink调试工具,USB转串模块、杜邦线、3.7V锂电池或Mocro USB线。
; G* B) y" n4 w  ]5 V2 E9 M    使用USB转串模块连接手机蓝牙串口,连接方式如下:
# P) ]7 }/ L0 @, @        (1)USB转串模块一端只需要使用杜邦线连接RXD、TXD、GND三个引脚,如下图所示:
, G  y0 X( \$ C0 \2 B5 ^6 L# p
2 f4 O/ X: A6 l3 ]& y$ W$ X: C    
1 Y0 R, K( i# w& I+ ?    图8
/ b" I+ V4 H. z, w, V+ j0 k, y    (2)手机主控底板一端需要使用杜邦线连接左侧J7三个引脚,与USB转串模块的引脚一一对应(串口引脚交叉),分别为RXD-->TXD、TXD-->RXD、GND-->GND,如下图所示:4 c4 k$ O0 x1 ^" m
: G" e  R% w5 \' o  t
     
  X" N9 i; H/ Z4 B" @! l    图9( W) T" U( I$ q# z$ J' u) q. N
    使用JLINK通过杜邦线连接手机蓝牙,连接方式如下:
: p- k7 q+ d1 V" ^5 I( u    (1)JLINK一端只需要使用杜邦线连接JLINK的SWC、SWD、GND三个引脚,如下图所示:
% |# S  s5 Y$ Y! j$ u& _0 Z, y4 y6 j
' P* w) l5 ]  _) X6 e+ n8 @# X    
6 N* q% H* T5 V/ ?! w    图10
2 ?" |$ s. z5 q& S2 R; g# }    (2)手机蓝牙一端需要使用杜邦线连接上方右侧的J3三个引脚,与JLINK的连接引脚一一对应,分别为SWC-->SWCLK、SWD-->SWDIO、GND-->GND,如下图所示:$ N0 |- _7 V4 B1 N
" e* s  _& ]& ]+ Y2 p$ |' D
   
% {7 f4 \" p% ?/ V' O2 @* O- T    图11) s- a3 v6 H% x1 M
    将JLINK插上电脑的USB接口,连接好之后给手机主控底板供电,详细的介绍可以参考《如何上电》教程,路径为:..\WT_Mobile\0.从这里开始\0.开机测试。
$ ]- d2 e/ w2 i4 Z0 W/ T    SPI实验的Keil工程为spi_flash.uvproj,位于目录:
! ^5 s+ t, F3 Z* j    ..\WT_Mobile\1.初级教程\DA14580\6_初级_SPI\projects\target_apps\peripheral_examples\spi\spi_flash\Keil_5,如下图所示:8 d- I( w  H" m+ E& @; z! @5 d4 L
" L' o: }* Z1 y: A
     
$ [- r  L0 \& U( K: h    图124 |. `( j1 `' h6 Q
    打开串口调试助手连接串口模块。在KEIL中编译源代码,点击DEBUG,然后点击全速运行,就看到串口打印出的读写Flash的信息,如下图所示:: B" c# K/ {3 I, O" q/ j, w

) \8 \8 P+ }% [& h* R0 O 0 |3 H9 w- F5 v0 b; `

- @) O- P: Z: ? ' Y; H  P6 r) |' x2 b. T

5 l* Y+ F0 k# e9 y' W2 F     2 V9 V# d$ M: _6 V4 k- C
    图13( B: v, p" O) t1 E& k3 ^* \* h

5 I+ n* a/ T8 O/ K
3 I0 Q3 j- M* u7 M0 X7 @
8 ~/ O) q& Z: N$ P9 [, C( `6 @% N    配套资料:http://www.fengke.club
4 N. j5 l+ E6 q* ~. l  ~$ y5 p, l/ W    套件地址:http://shop115904315.taobao.com/9 Z) q) P8 ~; o" K- T: @# Y; V
    文件下载请点击: SPI教程.pdf (1.03 MB, 下载次数: 0) / M, K3 J6 r& M& d

: ]7 B8 q' P2 P0 j8 y7 E% 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 18:41 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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