|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。
8 a c8 C! e) I" m. ]2 y# A' @$ l, H. ^2 l0 ^% b' }
第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。基于S3C2440的Linux驱动 -- SPI子系统解读(一)
/ X. Y+ g- j6 M+ Q1 C6 i' J, J u9 {# i. v& z# V1 s7 E/ e
第二部分,该文将对SPI的主控制器(master)驱动进行描述。基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)和基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)/ @0 @- c8 y3 f4 F
第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。基于S3C2440的Linux驱动 -- SPI子系统解读(三)5 F4 k) K2 U2 n k
9 K* @- e8 f! A% \ 第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。; x* n7 r/ k% \
0 W$ B2 r; J$ g9 Q3 @
本文属于第四部分(下)。9 A, {* m% V8 _6 R4 s: D( `
: X& V" x9 V; O5 d4 F
1 z8 c1 p4 ]1 A" x10. ioctl方法
! b3 r( r: H% |8 R2 }$ i- c$ d6 r/ ^ 这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。
! m& o) W# k. g% v" f
: W& v, Y3 t8 r; e/ g2 l- T: T10.1 spi_ioc_transfer. \# }4 w) w: E) A0 L
/ |8 x, ^0 f+ V4 ~: Y, [6 R 在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。
! }8 `# T4 q8 V9 Z; g; ?' A
& v% ~3 l8 n- H1 {" |" {% Q/ ]+ Y- i( [
* N i( p4 y* ?7 z7 p; u0 I
7 U/ v1 a- Q6 P3 |% K* x( G |
|