|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。
, f6 ~ _" t/ ?# M( H) o" @. `3 @- U
4 @4 Y! A5 ^+ i, b. M C 第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)' s6 N' W) h. `* H: }
, A4 |7 S# b. r# l" u' L 第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)# i3 M" N# Y$ }: P- ]
第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)
$ V. k+ q$ Q1 z
' ]/ o/ T" b5 C6 p! f+ \ 第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。
% Q! A/ b% y2 v- S/ T
" ~$ t& B6 X! f* o x+ k本文属于第四部分(下)。
s1 G7 l) @, s v3 R; `+ E
& f" }8 j+ i; Y$ @' P) f+ F7 c" G* Y8 v1 R1 Q* `7 y
10. ioctl方法
$ W+ A' ?! i/ H6 `# c5 M 这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。! g) |1 I! p7 ]0 N" e
# S. F. {4 `' I4 N
10.1 spi_ioc_transfer
+ ~7 r# b; X0 M k8 o6 p( U: `% n
/ m. Y6 R( I, Y 在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。
) c1 w$ Q+ A# P% P( B) C
, }! e: Q1 h: n; o0 x: \" ^6 P& a# e( q0 Z7 a
1 C2 `6 b( \5 ~8 E4 b! ~ T
" T1 z7 A8 P- F6 N |
|