|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。) K9 D1 X4 [; i3 S6 r( M
7 y! g9 y7 I: t3 N4 f/ U) z" q 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)
8 z7 c% ^4 L' y6 @# h7 U# z
3 h, D4 T) `% Q: Z 第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)
) D9 G3 g. \# n7 T2 w5 ^! n% y 第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)
1 n6 C; L+ o0 Q- q' `# F3 \% K
0 m! `. Y$ ]7 c+ v; X: ` 第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。% x; H3 w# n9 i0 |% n6 I
/ m: G0 W* N& i本文属于第四部分(下)。. h5 i$ \* F9 V
6 m+ p8 l+ p& W7 ~1 `8 p N
7 f1 ^( b/ S" u/ w9 `) G, {10. ioctl方法* i- h# _' r2 f$ P
这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。
7 M" h r( I- S O1 d1 P2 `1 L9 c# e K/ K/ z/ V, ~% H9 u
10.1 spi_ioc_transfer7 Z6 h7 O' C# P# e! P2 d
" q$ Z, ]. t9 s6 C
在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。+ F% ], T$ B3 I/ Z
/ C8 @4 \# S6 w6 Z$ u% c! O
) }9 a6 D8 D. @8 N: Z6 h
9 u7 }5 d% m8 |' U5 E- O
3 f# Y# N( g9 g- @% I, }1 Q |
|