|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。
I7 V, n$ N; r. g& x! n( F, I3 Y, I. j( {3 n6 w, l
第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)
! h# |0 K) T; h; {, r# V8 S- R4 } } ^8 \
第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)
" p9 Q9 u% _* l; x 第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)4 n1 @. g9 i8 R4 V" i
2 V( b S" U" t" S: [7 [
第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。- g. z1 u7 c2 L- S4 \) ^
7 ~5 m1 O4 {' c9 d8 j' C3 P F
本文属于第四部分(下)。
7 M; ?- g- E, V- h( U3 V6 d2 ^- q0 X2 ]
' {& V1 R7 h2 c) p10. ioctl方法# G# J9 _) s$ }
这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。/ ^/ R) \5 q0 Y! Q: p. W
) D& t# v, W# t4 y
10.1 spi_ioc_transfer
. x; M- G3 s9 f1 T& `" M! L9 x" u3 ?8 t; Q
在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。) v. v, x3 j5 }
2 T. k5 Z8 s! D3 [2 z/ N$ G" p2 P" L* B( c3 I
6 _3 Q4 M9 I/ o) e$ J0 A. _
5 ]; b6 K; \/ z |
|