EDA365电子论坛网

标题: 基于S3C2440的Linux驱动 -- SPI子系统解读(四)(下) [打印本页]

作者: uperrua    时间: 2019-8-29 09:30
标题: 基于S3C2440的Linux驱动 -- SPI子系统解读(四)(下)
本系列文章对Linux设备模型中的SPI子系统进行讲解。SPI子系统的讲解将分为4个部分。
' s/ y$ D& ]8 ]" P' Y! K3 @) e- ]5 ~% d) L, Y* d
   第一部分,将对SPI子系统整体进行描述,同时给出SPI的相关数据结构,最后描述SPI总线的注册。
基于S3C2440的Linux驱动 -- SPI子系统解读(一): h1 v( `! l# I' e2 x
  }, b1 k; G7 k8 F
   第二部分,该文将对SPI的主控制器(master)驱动进行描述。
基于S3C2440的Linux驱动 -- SPI子系统解读(二)(上)基于S3C2440的Linux驱动 -- SPI子系统解读(二)(下)
% b0 a, j4 ^. T4 O& m% K' \8 f, |   第三部分,该文将对SPI设备驱动,也称protocol 驱动,进行讲解。
基于S3C2440的Linux驱动 -- SPI子系统解读(三)  `1 ?! J1 }+ v, a; p8 r  F3 P5 u

9 }! v# r) L% _: n   第四部分,即本篇文章,通过SPI设备驱动留给用户层的API,我们将从上到下描述数据是如何通过SPI的protocol 驱动,由bitbang 中转,最后由master驱动将数据传输出去。
1 E) g9 r) m, {; `8 }3 F% S- R
3 w; f; ~6 R7 |; E% t8 F本文属于第四部分(下)。
9 X1 h& }( {1 p3 H: m; U
1 ?: |; [8 d* S9 S5 C

" u- O+ ~* T6 v$ f  L& o2 ?$ s& J( S10. ioctl方法

$ ]# A; l( p& ]9 W0 t  V! {6 ^5 f$ D   这一章节中,我们将看一下SPI子系统是如何使用ioctl系统调用来实现全双工读写。
, c: Q: _9 y/ \' I' Q5 j! K8 ?8 l

6 j  @6 U- R* s7 c8 [% s10.1 spi_ioc_transfer
( F+ [+ I0 u8 f! }0 Z0 M
$ z6 W; j& b7 b/ M
   在使用ioctl时,用户空间要使用一个数据结构来封装需要传输的数据,该结构为spi_ioc_transfe。而在write系统调用时,只是简单的从用户空间复制数据过来。该结构中的很多字段将被复制到spi_transfer结构中相应的字段。也就是说一个spi_ioc_transfer表示一个spi_transfer,用户空间可以定义多个spi_ioc_transfe,最后以数组形式传递给ioctl。1 M; B; s1 E8 W

& }+ M6 z- k/ J, @' C& L# X( s, c! p. P( n5 s. [
1 K3 I: T, `' b( r  \/ C0 `6 v
5 R6 d- {7 h5 ^

作者: wu68aq    时间: 2019-8-29 19:05
好东东必须顶。




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2