|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。- i& k) i4 g7 t* a, h/ V
4 N+ [) j- h5 o8 c 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)
o1 Q! W9 d; `; ~9 f: x% v1 p J: G5 Z3 U
第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)
: g% Q) }) l3 O' M$ _1 J" X2 [ 第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)% q3 j7 q# e4 V Q$ Q" A
, i" Z0 E% I- R8 [9 ^* |8 o
第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。
" Z& _/ r) [# a: M; G4 @# l& m4 y& S, L, Q% m0 R
本文属于第四部分(下)。
. V, R M, H& V' n% p2 u3 i0 x( G, i
* D& O( h( I) P3 m8 F- K# N4 D/ t. h' }; p0 A
10. ioctl方法
2 v. N3 o! [9 h, r; @ ~' j 这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。
( N' l! X) I3 e; y) W! s2 h0 S$ v j4 d4 b. l7 z7 I: D
10.1 spi_ioc_transfer
3 g" A q: F2 l) V7 I. ~8 ]
* [# c M3 E" Z% b7 F 在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。# {( {! l* j6 M8 A
- S+ @9 M3 n, h- |+ L
. E4 S; }# c5 F% n2 ^- v: T! B( Q/ e: q; [9 u0 f! L5 {
* ~! W) a1 p# ^, W: [2 X. j" u |
|