|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。
, h* q0 w2 q" M: _! y& J' M! ~
& N4 h% {2 c9 s- Z2 X# C 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)0 J( \7 R3 F5 u5 E8 x/ Y
$ V; F/ X9 N7 q2 `+ m2 @( V0 U
第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)# G) Y* c, { \4 S8 a
第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)+ W) p4 e6 Q2 @# V$ E
8 p- Q6 `6 N; k. N1 }. V
第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。
2 i' m; a1 ~ B6 \3 z/ c4 A6 D* C0 r5 c
本文属于第四部分(下)。
7 r9 k5 F9 K G! N' H# L
& S# C" s7 F4 {8 Y2 |& c( h' I' `8 b$ p( F, ^! \4 S( J7 d( J
10. ioctl方法8 B( P: T2 m4 g u5 z6 l& D
这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。
1 o7 u% T: A6 a8 g f* E
\& x2 ^5 h/ l" [10.1 spi_ioc_transfer
8 g" j: ^7 P. W
- L; m) K' ~8 }* l* E 在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。
4 Y. T C4 e. |$ y* T# i' ^+ _# W7 `5 C5 A, ]" ^7 H
( w% x9 }1 x4 m# H2 k
: x- J2 ~: g' N: K* M
% M: X7 b v1 a, [3 {+ i
|
|