Linux设备驱动程序架构分析之SD Spec摘要

作者:刘昊昱 

博客:http://blog.csdn.net/liuhaoyutz

 

本文是对SDSpecifications Part 1 Physical Layer Simplified Specification Version 4.10的摘要记录,具体信息可参考该文档。

 

3、SD Memory Card System Concept

3.1 读-写属性

按照读/写属性分,SD Memory Card可以分为两种类型:

u  Read/Write(RW) cards(例如Flash,One TimeProgrammable - OTP,Multiple Time Programmable - MTP)。这种类型的卡通常以空白卡的形式销售,用来存储数据、用户视频、音频、图片等等。

u  Read Only Memory(ROM) cards。这种卡内容是固定的,不能更改或删除,通常用来分发软件、音频、视频等等。

 

3.2 工作电压

按照工作电压分类,SDMemory Card可以分为两种类型:

u  High Voltage SD Memory Cards,工作电压为2.7 - 3.6V。

u  UHS-II SD Memory Card,工作电压 VDD1为2.7 - 3.6V, VDD2为1.7 - 1.95V

 

3.3 卡容量

3.3.1 用户空间和保护空间

SD Memory Card有两种相互独立的存储空间:用户空间和保护空间。用户空间是主要的存储空间,而保护空间必须通过认定机制才能访问。卡容量是用户空间和保护空间的总和。

 

3.3.2 卡容量分类

按照卡容量,SDMemory Card可以分为三类:

u  Standard Capacity SD Memory Card(SDSC),支持的容量最大为2Gbytes。

u  High Capacity SD Memory Card(SDHC),支持的容量从2G到32G bytes。从Physical Layer SpecificationVersion 2.00开始支持这种卡。

u  Extended Capacity SD Memory Card(SDXC),支持的容量从32Gbytes到2TB。

 

3.4 速度分类

SD Memory Card的速度可以分为5个级别:

u  Class 0,它包括Physical Layer Specification Version 2.00之前的所有早期卡,不考虑其速度性能。

u  Class 2,速度大于或等于2MB/sec。

u  Class 4,速度大于或等于4MB/sec。

u  Class 6,速度大于或等于6MB/sec。

u  Class 10,速度大于或等于10MB/sec。

SDHC和SDXC卡的速度级别必须大于或等于Class2。

 

3.5 总线拓扑

 

3.6 总线协议

3.6.1 SD总线协议

SD总线通信基于命令和数据流。

u  命令:命令是标志着一个操作开始执行的令牌。命令从host发出,可以传递给单个Card(单一地址命令),也可以传递给所有连接的Card(广播命令)。命令在CMD线上串行传输。

u  应答:应答是一个Card或所有连接的Card发送给host的一个令牌,做为对前面接收到的命令的回应。应答在CMD线上串行传输。

u  数据:数据可以从card传送到host,也可以从host传送给card,数据的传输是通过数据线进行的。

card地址是一种动态分配的会话地址,在卡的初始化阶段分配。我们将在第4章介绍命令、应答、数据的具体结构。最基本的传输是命令/应答传输,如下图所示:

这种传输直接通过命令/应答传递信息,但是,有些操作需要传输数据。

数据传输以块为单位进行,数据块之后紧跟着CRC校验位。我们可以定义传输单个数据块或传输多个数据块。多个数据块传输以一个stop命令结束。host可以配置数据传输使用一条或多条数据线。

块数据传输如下图所示:

块写操作使用在DAT0数据线上的一个busy信号表明写操作正在进行中,不论数据传输过程中使用了多少根数据线。

命令具有如下格式:

每个命令由一个起始位0开始,由一个结束位1结束。命令由CRC校验位进行校验,命令长度为48个bit。

应答依据其内容,有4种格式,如下图所示:

应答长度为48 bit或136 bit。具体定义我们将在第4.7节介绍。

在CMD线上,最高有效位(MSB, Most Significant Bit)先传送,最低有效位(LSB, Least SignificantBit)最后传送。

当使用宽总线模式,数据一次传输4 bit,每条数据线上有自己对应的开始位、结束位和CRC校验位,CRC校验报告和Busy报告只通过DAT0数据线传递给host,此时,DAT1 – DAT3被忽略。

对于SD卡,有两种数据包格式:

l  Usual data(8-bit width):usual data的最低有效字节(Least Significant Byte)首先传送,最高有效字节(Most Significant Byte)最后传送。但是在每个独立的字节中,最高有效位(MSB, Most Significant Bit)先传送,最低有效位(LSB, Least Significant Bit)最后传送。

l  Wide width data(SD Memory Register):wide width data从最高有效位开始传送。

 

3.6.2 SPI总线协议

我们将在第7章详细介绍SPI总线协议

 

3.6.3 UHS-II总线协议

UHS-II总线协议的内容在UHS-II附件中介绍。

 

3.7 SD Memory Card引脚与寄存器

3.7.1 SD总线引脚分配

SD卡尺寸为24mmx 32mm x 2.1mm或者24mmx 32mm x 1.4mm,其外形和引脚如下图所示:


下表描述了SD卡的引脚:

每个SD卡中都有如下表所示的寄存器,我们将在第5章对这些寄存器进行详细说明:

host可以通过将供电电源关闭再打开而达到重置SD card的目的。每个SD card都有自己的上电检测电路,上电后,SD card将进入一个预定义的状态。host也可以发送GO_IDLE(CMD0)命令让SD card进入重置状态。

 

3.7.2 UHS-II引脚分配

UHS-II Card外形如下图所示:

UHS-II的引脚安排在第二行,第一行引脚在非UHS-II模式下与SD Card引脚作用完全相同。在UHS-II模式下,第一行中的第7和8针引脚用作PCLK。

UHS-II引脚的作用如下表所示:

UHS-II Card在UHS-II模式下不使用SD I/F相关引脚。host不能将这些未使用的引脚悬空,而应该将它们保持在一个预定义的高或低电平,怎样保持依赖于具体host的实现。例如使用上拉电阻,或者host不使用上拉电阻而直接驱动这些线为低电平。

在休眠状态下,未使用的线应该在关闭VDD1之前被设置为低电平。

 

3.8 ROM Card

ROM Card是只读的存储器,一个永久或临时写保护的SD Card不属于ROM Card。

ROM Card满足下面的要求:

3.8.1 寄存器设置要求

下表是ROM Card的寄存器设置要求:

 

3.8.2 不支持的命令

ROM Card认为下面的命令是非法命令:

CMD24、CMD25、CMD27、CMD28、CMD29、CMD30、CMD32、CMD33、CMD38

 

3.8.3 可选命令

ROM Card认为下面的命令是可选命令

CMD42、安全命令

l  如果不支持CMD42命令,CCC的第7位应该被设置为0。此时CMD42被认为是非法命令。

l  如果ROM Card支持CMD42,应该通过预先设置密码支持“Unlocking the card”和“Locking the card”功能。当接收到CMD42的其它不支持的功能时,标示LOCK_UNLOCK_FAILED。

l  如果不支持安全命令,SD_SECURITY应该被设置为0,此时安全命令被认为是非法命令。

l  ROM Card不支持写或擦除保护区域。

 

3.8.4 WP开关

一个full-size的ROM Card没有WP开关。

 

3.9 Ultra High Speed Phase I(UHS-I)Card

UHS-I在4-位 SD总线单一接口的情况下支持最高104MB/sec的传输速度。

3.9.1 UHS-I Card操作模式

l  DS:Default Speedup to 25MHz 3.3Vsignaling

l  HS:High Speed upto 50MHz 3.3V signaling

l  SDR12:SDR up to25MH 1.8V signaling

l  SDR25:SDR up to50MH 1.8V signaling

l  SDR50:SDR up to100MH 1.8V signaling

l  SDR104:SDR up to208MH 1.8V signaling

l  SDR50:SDR up to50MH 1.8V signaling

注意:1.8V信号时钟与3.3V不同

 

3.9.2 UHS-I卡类型

UHS-I支持两种类型的卡:

l  UHS50

l  UHS104

UHS-I不支持SDSC卡,支持SDHC和SDXC卡。

下面的两幅图显示了UHS-I支持的模式:

 

3.9.3 UHS-I host与card的连接

host可以使用SDR50、DDR50和SDR104模式连接UHS50卡或UHS104卡。

下表显示了不同类型的host和card连接时UHS性能:

UHS-I对于可插拨卡假设只有一个卡连接到总线上。最高性能104MB/s只有有host支持SDR104模式并且card是UHS104卡(支持SDR104模式)。如果卡是UHS50卡,或者host不支持SDR104模式,性能则会被限制在50MB/s以内。

 

3.9.4 UHS-I总线速度模式选择流程

上图显示了使用UHS-I的命令流。上电后,card处于3.3V信号模式。第一个命令CMD0选择总线模式:SD模式或SPI模式。1.8V信号模式只能使用SD模式。一旦card进入1.8V信号模式,除非重新上电,card就不能切换到SPI模式或3.3信号模式。如果card收到CMD0命令,card就进入idle状态但是仍然以SDR12时序在工作。UHS-I只支持SD模式,而不支持SPI模式。

因为高总线速度需要低电平信号,UHS-I为SDR50、DDR50、SDR104模式采用1.8V电平,card仍然使用由host提供的3.3V电源,SDCLK、CMD和DAT[3:0]采用由3.3V电源线转换过来的1.8V电平信号。为了避免host和card之间电平不匹配,在初始化阶段使用电压切换器改变电平信号。host和card使用ACMD41命令通信是否支持1.8V信号模式。如果host和card都支持1.8V电平,则表示可以使用UHS-I。CMD11调用电压切换流程。card进入UHS-I模式,当电压切换成功后,card的输入输出时序都发生变化(默认为SDR12)。

除了CMD42,UHS-I只支持4位总线模式。如果卡被锁定,host需要使用CMD42在1位模式下解锁卡,然后发出ACMD6转换为4位总线模式。

host可以通过CMD6 Function Group 3选择合适的output driver strength。

host可以通过CMD6 Function Group 1选择一种UHS-I模式。

当卡被解锁后,CMD19可以执行1.8V信号模式转换,其它情况下,CMD19被认为是非法命令。

 

3.9.5 UHS-I系统模块图

 

3.9.6 UHS-I card总线速度模式总结

下表显示了不同总线速度模式下对card的需求:

下表显示了对于不同的card类型,可选/强制(option/mandatory)的总线速度模式:

 

3.10 Ultra High Speed Phase II(UHS-II)Card

3.10.1 UHS-II Card操作模式

SD总线接口模式

l  DS:Default Speedup to 25MHz 3.3V signaling

l  HS:High Speed upto 50MHz 3.3V signaling

l  SDR12:SDR up to25MHz 1.8V signaling

l  SDR25:SDR up to 50MHz1.8V signaling

l  SDR50:SDR up to 100MHz1.8V signaling

l  SDR104:SDR up to 208MHz1.8V signaling (Optional)

l  DDR50:DDR up to 50MHz1.8V signaling (Optional forStandard Size Card)

UHS-II接口模式

l  FD156:Full Duplexmode up to 156MB/s at 52MHz in Range B

l  HD312:Half Duplexwith 2 Lanes mode up to 312MB/s at 52MHz in Range B (Optional)

 

3.10.2 UHS-II Card类型

UHS-II只支持一种卡类型。

l  UHS156:这种类型的UHS-II卡在FD156模式下速率可达到1.56Gbps,在HD312模式(可选)下可达到312Gbps。

 

3.10.3 UHS-II host与card的连接

 

3.10.4 UHS-II接口选择流程

支持UHS-II的host将同时支持SD Bus Interface (I/F)和UHS-II I/F。可移动UHS-II卡槽也将同时支持这两种I/F。所以,UHS-II卡可以初始化为UHS-II模式也可以初始化为SD总线模式。

下图显示怎样选择UHS-II模式。上电后,UHS-II卡的SD bus I/F和UHS-II I/F都被使能。支持UHS-II的host提供PCLK和STB.L到D0线。host等待D1线将EIDL改变为STB.L,如果STB.L在D1线上被检测到,host就开始初始化UHS-II.如果经过200us后,D1线上仍没有检测到STB.L,host就初始化card为SD Bus I/F模式。

 

下图显示了UHS-II初始化流程。第一步是PHY初始化。PLL被激活并同步。在结束PHY初始化之前,SD Bus I/F是禁用的。第二步是设备初始化,设备的backend function被初始化。第三步是枚举。唯一的4位设备ID被分配给每个设备,通过设备ID就可以选择一人的设备。第四步是配置。UHS-II寄存器被配置为能以优化的总线顺序使用UHS-II设备。第五步是SD-TRAN初始化。UHS-II通过SD-TRAN模拟SD命令。SD-TRAN初始化等同于SD总线初始化,但是host以UHS-II包的形式发送SD命令。除了一些特别的命令,UHS-II card接受大部分SD命令。如果收到了CMD0命令,UHS-II card重新回到SD-TRAN初始化阶段。

下图显示了UHS-IICard的SD Bus I/F初始化序列。在ACMD41命令执行结束之前,UHS-II card应该禁用UHS-II接口。

 

3.10.5 UHS-II Card总线速度模式总结

下表显示了Card类型和支持的总线速度模式:

推荐UHS-II host实现UHS-I模式(至少SDR50),以实现向后兼容UHS-I卡。

 

4、SD Memory Card功能说明

4.1 概述

host与card之间的通信是由host控制的,host发送的命令有两种类型:广播命令和指定地址命令(也叫点对点命令)。

u  广播命令:广播命令是发送给所有card的命令,有些广播命令要求一个应答。

u  指定地址命令(点对点命令):指定地址命令是发送给指定地址card的命令,并且还要要求从这个card得到一个应答。

对于SD MemoryCard系统(包括host和card),有两种操作模式:

u  card识别模式

对于host来说,重置之后,当它正在探测总线上的card时,该host处于card识别模式。

对于card来说,重置之后,直到接收到SEND_RCA命令(CMD3),该card处于card识别模式。

u  数据传输模式

对于host来说,当总线上的所有card都被识别之后,host进入数据传输模式。

对于card来说,当它的RCA第一次被发送之后,该card进入数据传输模式。

下表列出了操作模式与card状态的关系,每种card状态都与一个操作模式相关联:

 

4.2 Card识别模式

在Card识别模式下,host重置所有的card,验证操作电压范围,识别卡并且要求他们发送Relative CardAddress(RCA)。这些操作是在每个卡自己的CMD线上完成的。在Card识别模式中,所有的数据通信都是在CMD线上完成的。

在卡识别过程中,card是在SD时钟频率下执行相应操作的。

 

4.2.1 Card重置

在SD模式下,命令GO_IDLE_STATE(CMD0)是软重置命令,它设置card进入idle状态。如果card当前处于inactive状态,则不响应这个命令。

由host供电后,所有的卡都进入idle状态,包括之前处于inactive状态的卡。

当接收到CMD0或者由host供电后,所有card的CMD线都处于输入模式,等待下一个命令的起始位。card初始化后,使用默认的relativecard address(RCA=0x0000),使用默认的driver strength和400KHz时钟频率。如果使用3.3V信号,默认driver strength由Driver Stage Register(DSR)指定。如果使用1.8V信号,默认driverstrength由B类型driver指定。

在UHS-II模式下,RCA并不是由CMD0设置为0x0000,而是保持它的设备ID,设备ID是由枚举决定的。

 

4.2.2 操作条件确认

host与card刚开始通信时,host不知道card支持的工作电压,card也不知道它是否能在当前的电压下工作。当host发出重置命令CMD0时,同时发出一个特定电压给card,host假设card能在这个电压下工作。

为了验证电压,在PhysicalLayer Specification Version 2.00中,定义了一个新的命令CMD8。

SEND_IF_COND(CMD8)命令用来验证SDMemory Card interface操作条件。card通过分析CMD8的参数来检查操作环境的有效性;host通过分析CMD8的应答查检有效性。提供的电压由参数的VHS域指定。card假定VHS指定的电压为当前供应电压。在任何时候,VHS只能有一位被设置为1。CRC和检查样式都被host用来检查host与card通信的有效性。

如果card在给定的电压下能工作,应答返回供应电压和检查样式。

如果card不能在给定的电压下工作,它不进行应答保持在idle状态。

初始化SDHC或SDXC card时,强制要求在发送ACMD41命令前先发送CMD8命令。如果card收到CMD8命令,它就可以知道host支持PhysicalLayer Version 2.00或之后的版本,card就可以使能新的功能。

SD_SEND_OP_COND(ACMD41)命令被设计用来使得SD Memory Card host能够拒绝不匹配VDD范围的card,host通过将需要的VDD电压窗口作为命令的操作数发送出去达到这个目的。在指定VDD范围不能进行数据传输的card将被抛弃,该card进入inactive状态。OCR寄存器的值将进行相应设置。

注意ACMD41是应用程序特有的命令,因此APP_CMD(CMD55)命令必须在ACMD41之前执行。在idle状态下CMD55命令使用的RCA是card的默认RCA=0x0000。

host发出CMD0命令重置card后,host应该在发送ACMD41命令前先发出CMD8命令重新初始化card。

下图是SD I/F card识别模式的状态图:

 

4.2.3 Card初始化和识别

总线被激活后,host就开始card的初始化和识别,具体过程如下图所示:

初始化过程开始于SD_SEND_OP_COND(ACMD41)命令,通过设置该命令的操作环境和设置OCR的HCS位。HCS(Host CapacitySupport)位被设置为1,表明host支持SDHC或SDXC card。HCS(Host CapacitySupport)位设置为0,表示host不支持SDHC或SDXC card。

CMD8命令扩展了ACMD41的功能,参数中的HCS和CCS(Card Capacity Status)在应答中。HCS被不应答CMD8的card忽略,如果card不应答CMD8,host将设置HCS为0。Standard Capacity SD Memory Card忽略HCS,如果HCS设置为0,SDHC和SDXC永远不会返回ready状态(保持busy位为0)。

OCR中的busy位被card用来通知host ACMD41初始化是否已经完成。将busy位设置为0表示card仍然在初始化过程中。将busy位设置为1表明初始化已经结束。Card初始化应该在从第一个ACMD41开始的1秒钟内结束。host重复发送ACMD41至少1秒钟或者直到busy位被设置为1。cardk只在第一个ACMD41检查操作条件和OCR中的HCS位。

如果card应答CMD8,则ACMD41的应答中包括CCS域信息。当card返回read状态时(busy位被设置为1),CCS有效。CCS=0意味着card是SDSC,CCS=1意味着card是SDHC或SDXC。

host对系统中所有的card执行相同的初始化流程,不兼容的card被设置为inactive状态。接下来host会发送ALL_SEND_CID(CMD2)命令到每个card,获取每个card唯一的CID号。还没有被认证的card(即处于ready状态的card)将发送它的CID号应答(使用CMD线)。当card的CID被发送之后,card进入identification状态。然后,host发送CMD3(SEND_RELATIVE_ADDR)命令要求card发送一个新的relativecard address(RCA),该RCA比CID短,用来在后面的数据传输阶段寻址card。一旦card的RCA被接收,card就进入Stand-by状态。此时,如果host想为这个card分配另外一个RCA,它可以向这个card再发送一个CMD3命令要求card发送一个新的RCA。最后的发送的RCA是该card真正的RCA。

host对每个card重复上述认证过程,即对每一个card重复CMD2和CMD3命令。

初始化SDXC的过程与初始化SDHC的过程一样,SDXC card的用户空间容量由C_SIZE指定,大于或等于32GB。

 

4.2.3.1 初始化命令(ACMD41)

下面是ACMD41的参数的一般原则:

(1)       如果参数的voltage window field(bit 23-0)被设置为0,则称之为“inquiry ACMD41”,“inquiry ACMD41”不会启动初始化过程,它用来获取OCR。“inquiryACMD41”忽略参数的其它部分(bit31-24)。

(2)       如果参数的voltage window field(bit 23-0)第一次被设置为非0值,则称之为“first ACMD41”,它用于启动初始化过程,参数的其它部分(bit 31-24)有效。

(3)       接下来的ACMD41命令的参数与第一个ACMD41命令的参数相同。

下图显示了ACMD41参数格式:

下图显示ACMD41应答格式:

 

4.3 数据传输模式

Card识别模式结束之前,host将保持fOD频率,因为一些card在卡识别模式下具有操作频率限制。在数据传输阶段,host将在fPP频率下操作card。

host发送SEND_CSD(CMD9)命令来获得card相关数据(CSD寄存器),例如,块长度、card存储容量等等。

广播命令SET_DSR(CMD4)配置所有已识别卡的driver stages。它根据总线布局、总线上卡的数量以及数据传输频率配置卡的DSR寄存器,同时,时钟频率也从fOD转换到fPP。SET_DSR命令对host和card来说是一个选项。

CMD7用于选择一个card,使之进入TransferState。在同一时刻,只能有一个card进入Transfer State。如果之前有一个card处于Transfer State,它与host的连接将被释放,该card返回Stand-by状态。如果CMD7以预留的relative card address “0x0000”发出,所有的card将被退回到Stand-by状态。

各种数据传输模式之间的关系总结如下:

u  所有的数据读命令可以在任何时候被stop命令(CMD12)中断,此时,数据传输将终止,card返回Transfer State。读命令包括读一个块命令(CMD17)、读多个块命令(CMD18)、发送写保护(CMD30)、发送SCR(ACMD51)以及一般命令在读模式(CMD56)。

u  所有的数据写命令可以在任何时候被stop命令(CMD12)中断。在使用CMD7命令取消选择card之前,写命令将被停止。写命令包括写一个块(CMD24、CMD25)、设置CSD(CMD27)、加锁/解锁(CMD42)以及一般命令在写模式(CMD56)。

u  一旦数据传输完成,card将退出数据写状态,或者转到Programming State(传输成功时),或者进入Transfer State(传输失败时)。

u  如果块写操作被停止,并且块长度和最后一个块的CRC有效,数据将被programmed。

u  card可能为块写操作提供缓冲区,这意味着当前一个块正在被programmed时,下一个块就可以被发送给card。如果所有的缓冲区都被占用着,只要card正处于ProgrammingState,则DAT0线将被拉低(BUSY)。

u  对于写CSD、写保护和擦写命令来说,没有缓冲区选项。这意味着当card正在执行这三个命令的任意一个时,不接受任何其它数据传输命令。

u  当card正在programming时,不允许执行参数设置命令。参数设置命令包括:设置块长度(CMD16)、擦除块起始(CMD32)、擦除块结束(CMD33)。

u  当card正在programming时,不允许执行读命令。

u  其它card从Stand-by转换为Transfer State时(使用CMD7),擦除和programming操作不会被终止。card将切换到Disconnect State并释放DAT线。

u  可以用CMD7重新选择一个处于Disconnect State的card,该card将转为ProgrammingState并重新激活busy标志。

u  重置一个card(使用CMD0或CMD15)将终止所有挂起或正在进行的programming操作,这可能会破坏card上的内容。host应该防止这种情况发生。

u  CMD34-37、CMD50、CMD57被保留,用于SD命令系统扩展。

 

4.7 命令

具体命令描述表参考SPEC,这里不再详细列出。

4.7.1 命令类型

SD Memory Card有四种类型的命令:

u  Broadcast commands(bc):没有应答。

u  Broadcast commands with response(bcr)

u  Addressed (point-to-point) commands(ac),没有数据在DAT上传输。

u  Addressed (point-to-point) data transfer commands(adtc),有数据在DAT上传输。

 

4.7.2 命令格式

所有的数据都有固定的格式,长度为48 bits,如下图所示:

命令由一个start bit(总是为0)开始,紧跟着是一个标志传输方向的位(host = 1),接下来6位表示命令编号(0到63),接下来是32位命令参数,有些命令需要参数,有些不需要。上表中的“x”表示依据具体命令而定。所有的命令都由CRC进行校验。所有的命令都以一个endbit结束(总是为1)。

 

4.7.3 命令类别

SD Memory Card的命令被分为几个类别,每个类别支持一系列card功能。

Class 0、2、4、5、8命令强制要求所有类型的SDMemory Card都必须支持。Class 7命令除了CMD40外,强制要求SDHC和SDXC card支持。其它class的命令是可选的。一个card所支持的Card Command Classes(CCC)做为参数被写到Card Specific Data(CSD)寄存器中,为host怎样访问card提供信息。

具体commandclass信息参考SPEC。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
IIO(Industrial I/O)子系统是Linux内核中的一个子系统,它为驱动程序提供了一种通用的接口,用于访问各种硬件设备的模拟输入/输出接口。IIO子系统支持各种类型的模拟输入/输出设备,包括ADC(模拟数字转换器)、DAC(数字模拟转换器)、压力传感器、光传感器等等。 IIO框架提供了一些基础的数据结构,用于描述IIO设备和它们的数据: 1. struct iio_dev:IIO设备的描述结构体,包括设备名称、所属总线、设备ID、通道信息、触发器信息等等。 2. struct iio_chan_spec:IIO设备通道的描述结构体,包括通道名称、数据类型、量程、采样频率等等。 3. struct iio_buffer:IIO设备数据缓冲区的描述结构体,包括缓冲区大小、数据指针、数据类型等等。 4. struct iio_poll_func:IIO设备的轮询函数,用于读取硬件设备的数据。 IIO子系统还提供了一些基础的函数,用于IIO设备的注册、数据采集、数据存储等等。这些函数包括: 1. iio_device_register():注册IIO设备。 2. iio_device_unregister():注销IIO设备。 3. iio_buffer_alloc():分配IIO设备的数据缓冲区。 4. iio_buffer_free():释放IIO设备的数据缓冲区。 5. iio_read_channel_raw():读取IIO设备通道的原始数据。 6. iio_read_channel_processed():读取IIO设备通道的处理后数据。 7. iio_push_to_buffers():将IIO设备的数据写入数据缓冲区。 总之,IIO子系统提供了一个通用的接口,使得驱动程序可以方便地访问各种类型的模拟输入/输出设备

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值