|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。
/ J1 D. b# p+ F/ @$ C. @
) y0 f8 B/ i/ G" m& J9 U 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)
8 t4 ^; J. e2 w( [7 n8 g' {
& S, p; }. H# l. F+ P4 V1 E+ X 第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)! a9 O# y {9 l# T, u8 \
第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)
: i. t- t7 N( ^9 \# F; A
% h- o' c. ~1 k0 r0 n4 b r 第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。
9 K7 @2 n) ]; I; ~, ]3 h- a! ~1 W4 \$ D( ^- E( j+ ~# s3 c# E: c
本文属于第四部分(下)。
' ^) R4 e+ W, C6 Y! P2 |! v9 U6 ^, y S/ e( M& f) s
5 s' Z! H: w% B# _0 M. D
10. ioctl方法( z$ J+ U- Z1 x7 o! _) D/ p
这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。' @) c0 s+ F; E" I
4 N! b5 e. r) V! { L3 f; e
10.1 spi_ioc_transfer# ^$ {% a/ d. I- s4 k- C7 u, y
0 d# n4 j3 s$ k8 \# j 在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。
. D: \/ k' m' @
2 u9 v! W; o0 N, y# P# b* d+ P; f( o* m
" V* Z8 ` q( X
$ f- L8 o, ~# {: u
|
|