|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。" r. v) d- u$ X& I7 Z$ C, F
8 r1 H2 {, c. ~2 e: N/ x" I- @) W 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一) a5 Y% t6 M7 ~) ^' O
4 a8 |/ M( g2 R7 A# a, A- G 第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)
9 t: M4 h( Z+ ]+ l6 \ 第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三). B7 v2 u% M g
4 G- v; a" C6 o 第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。* f4 q) Y/ o+ a& N0 [ Y
5 c# X" x: m' z! b本文属于第四部分(上)。
3 I$ X9 C' d& F: w2 r' v5 q0 x2 L O( D4 \
7. write,read和ioctl综述/ ]4 B0 T. y$ G) t
7 C c1 E2 [9 C
在spi设备驱动层提供了两种数据传输方式。一种是半双工方式,write方法提供了半双工读访问,read方法提供了半双工写访问。另一种就是全双工方式,ioctl调用将同时完成数据的传送与发送。" j) @+ L3 m* t8 ]; q& z2 L7 K
+ i$ d$ F2 }) u" |" }4 \" g 在后面的描述中,我们将对write和ioctl方法做出详细的描述,而read方法和write极其相似,将不多做介绍。
3 \/ ]2 ]) z: N; g! q. J/ G! S9 b9 f$ n' l( s6 ^( ?
接下来首先看看write方法是如何实现的。/ D( D) m% x6 `% d1 F
0 T; V4 O& N% P$ [5 f8. write方法
/ ~2 c0 d. Z* E7 G+ c
: V' y0 [1 w+ J2 z8.1 spidev_write
4 V+ Y/ B% a4 Z% G2 z& g9 ~5 T" f
; f& U7 k* G9 C' Z( r! z2 \, q
* z- i7 L: a3 d8 D, r8 C9 Y. D0 L
2 e! H3 F0 n9 a2 P+ @5 I5 ]) v' M- V( P6 K
|
|