SPI salve
% ^+ ~; t: K' A% R& I/ n
SPI salve支持功能:
- 支持三线SPI或者四线SPI。通过define切换。
- 支持指令长度、帧长自定义。
- 工作时钟可自定义,大于SPI clk的2倍。3 @, u3 m- s6 v6 h6 i/ i+ D3 o7 v* e- w
+ l0 ?! j" }% H( X8 e+ ~# W" x& L
用户只需修改:(1)几线SPI。(2)单帧长度。(3)指令长度。(4)寄存器开辟。
1 |" t2 v) ]! `0 L0 V) i! D X+ a, ~
注意:指令最高bit表示读写,低写高读,其余bit表示地址。指令接着为数据端,两者位宽之和即为SPI单帧长。
/ |5 W: X: ^9 P, t$ u t7 W, d
" x# \- z1 `* }1 B+ F
: W+ _# J+ a: U; h* U7 i3 ^
SPI master
- @5 Q( z& H- s' i% z( N% a
spi master内部仅仅封装SPI驱动,写入值读出控制由上层控制,这部分逻辑很simple,不赘述。用户只需给入SPI帧及控制使能即可。
3 L. f- \2 C3 M2 M+ I" w+ p
用户只需修改parameter参数:(1)单帧长;(2)指令长;(3)数据长;(4)工作时钟;(5)SPI clk。
% z$ r: S5 n: _实现不使用状态机,采用线性序列计数法。
; X. ^, ?2 ?6 e7 S) u; S2 G" k
+ J& a5 C) Y/ }$ |
# N1 o# s, Y k/ D$ s
仿真如下所示:写入四个寄存器值,再读出。
9 U, R" A2 H. J. [1 W
仿真代码如下:
7 P" h5 L. q* i/ H
9 m( H0 `1 n& Y' c- r) W! `9 U) W7 e- ]6 ?( }
4 y7 z' o4 |' y( _4 z v1 d
三线SPI:
0 |: F' j" J" ]/ M. H
8 Q; w \& Q% ~
; s* y: L# O, ]( _1 R+ M
e1 @1 c* p5 l. r1 a1 k
四线SPI:
7 D: m( w! w' K# V3 q) d
* z, E* ] m) ~) _+ a) T* | O, O