具体实施方式的第二部分提供了可以由从设备用来与主设备或与总线同步的同步方法的各种示例实施例,该主设备或总线利用本文描述的统一总线通信协议的各种实施例中至少一个实施例。同步方法一般涉及用于搜索特定同步模式的技术,该特定同步模式是在字模式下可以顺序排序的数据比特系列(即,1和0),或者在比特流模式下同步模式的比特可以与其他数据比特复用或交互(interfaced),尽管依然以相同顺序发送。
一般而言,至少一个同步方法可以用于有利地允许从设备在总线已被初始化并已经工作一些时间之后连接到总线。这被称为热插入。因此,从设备可以针对其自身确定什么操作模式和帧格式正在用于总线通信协议,而无需被告知该信息,这是有利的,且一般而言传统总线通信协议不是这样做的。
在总线架构中,经常存在供设备信号通知它们何时需要使用总线、正在使用总线以及该用途的性质(例如,用于数值数据和命令指令的发送)的机制。然而,当海量异步进程正在尝试高效共享总线时,以及当这些进程使用不同的数据格式(例如比特流数据和数字字数据)时,总线控制可能变得相当复杂。例如,在传统总线系统中,需要不同接口以支持各种类型的数据。作为示例,PCM接口支持数字字数据,但是不支持比特流数据,且比特流接口不支持数字字数据。经常存在两种类型数据都被使用的系统,因为在一些应用中,传感器使用奈奎斯特型转换器(例如,温度传感器、加速度及和显示器),该奈奎斯特型转换器使用二进制字,而在一些应用中,将比特流接口用于低时延应用,例如,波束成形、主动噪声消除、或低时延控制应用。传统总线系统使用一个接口来传输数字字数据(例如,McBSP接口,其需要4条总线线),使用另一接口来传输比特流数据(例如,至少一个McPDM接口,其需要另外4条总线线),以及将另一接口用于控制数据(例如,I2C,其需要另外2条总线线),总共至少三个接口和至少10条总线和端子。这增加了所涉及组件的成本和额外空间要求并且增大了功耗。此外,当这种系统与外部设备一起使用时,使用多个连接器,导致更大的空间要求。
因此,在本文描述的至少一个实施例中,本文描述的统一总线通信协议的一个方面是提供可以处理比特流数据、数字字数据和控制数据的统一接口,同时使用更少数目的线,且因此使用更少数目的端子。可以通过避免使用数字字格式来维持比特流处理的优点,例如,低时延和快速瞬间响应。因此,本文描述的统一接口的至少一个实施例的方面是可以对比特流数据进行复用,以实现与比特流处理相同的时延(即,一比特时延)。此外,数字字数据可以用一次一个比特的方式发送,且每个比特与比特流数据进行复用,这消除了对数字字数据接口的使用。此外,诸如同步数据和命令数据之类的控制数据可以被转换为比特流格式,并被作为复用数据的一部分使用统一总线通信协议加以嵌入,这消除了对额外接口(例如,I2C)的使用,且还提供了鲁棒的可编程多格式数据接口。因此,统一总线通信协议的至少一个实施例的方面包括对隧道传输PCM/TDM/I2C流的支持以及对发送具有低时延的比特流的支持。
时钟数据也可以被并入控制数据中(在单线总线实施例中)或可以使用单独的线来提供它(在双线总线实施例中)。在另一条线上发送时钟信号允许从设备的实现简单,且还降低了对时钟抖动的影响。
因此,可以根据系统的具体要求(例如,头戴式耳机接口或作为一般总线系统)来使用一条或两条线来实现统一总线通信协议。然而,应当注意到:在备选实施例中,本文描述的统一总线通信协议可以与具有多于两条线的总线一起使用。总线使用多于一条线的实施例可以实现更高的带宽和物理层中的某些简化。
为了将数字字数据与比特流数据进行复用,在本文描述的至少一个实施例中,可以将统一接口的一个或多个帧信道分配为虚拟帧信道,在虚拟帧信道中,将数字字数据与比特流数据一起以一次一个比特的方式进行复用(即,交织(interleaved)或交叉),同时维持数据信道的数据的正确顺序。还可以存在以下实施例,其中,在使用比特流数据的帧信道和使用数字字数据的帧信道之间存在可编程组合,根据特定实施例,这允许对以不同采样率采样的数据进行带宽控制和组合中的至少一项。在统一接口的至少一个实施例中还分配控制信道,使得可以将控制数据与其他类型数据一起以一次一个比特的方式进行复用或交织。
在本文描述的至少一个实施例中,统一总线通信协议的方面是使用变化的帧长度,其使得以更高效的方式支持各种时钟频率和采样率更容易,例如,在电信应用中通常使用的那些时钟频率和采样率(例如,19.2和13.0MHz)。此外,统一总线通信协议可以适应其它常用的帧长度,例如针对SLIMbus总线通信协议所选择的并适合12.288MHz应用的768比特帧长度。由统一总线通信协议提供的控制功能具有比I2C总线通信协议更广泛的功能,且支持特殊功能,例如在至少一些实施例中用于音频的那些功能。统一总线通信协议的至少一个实施例支持对比特流数据与控制数据的同时的低时延的等时传输。
此外,在本文描述的至少一个实施例中,总线接口具有适用于传感器应用和音频应用的低复杂度,在传感器应用和音频应用中,出于集成、功耗和经济原因,低的门数目是有利的。主设备和从设备都可以实现低的门数目,主设备和从设备使用同步引擎和关联硬件来根据本文描述的统一总线通信协议的各种实施例进行通信和同步。较低的门数目还得到集成电路(IC)实现中的较低驱动器复杂度、更小的硅面积和较低成本。此外,由于统一总线通信协议适用于I2C隧道传输,可以用很少的付出来继续支持传统系统。
在本文描述的至少一个实施例中,统一总线通信协议的方面是对从设备的状态的连续监视的支持。这允许在没有任何握手过程的情况下对从设备的热插入和移除。这还允许从设备在错误的情况下将其自身从总线上撤回,以尽可能少的打扰总线。因此,从设备不可能对使用统一总线通信协议的总线进行暂停(stall),而对于I2C总线通信协议就不是这种情况。此外,与SMbus通信协议相比,在本文描述的统一总线通信协议的至少一些实施例中,可以更快速地实现对错误的检测和纠正。例如,SMbus在检测到错误之前可以要花费约35~40ms。对被暂停的总线的检测是由内部超时功能(在总线上没有活动的情况下)来激活的。使用本文描述的统一总线通信协议的至少一个实施例,可以更快速地发现该情形。在某些最差情况场景中,从设备可能花费约50~100ms来找回与总线的同步,但是对于本文描述的统一总线通信协议的至少一个实施例,将通常花费约1~10ms。
现在参见图1,其中示出了便携式电子设备10的透视图。在该示例中,便携式电子设备10是诸如蜂窝电话或智能电话之类的移动通信设备。然而,应当理解:本文描述的实施例不限于电话,而是可以扩展到可以受益于针对不同数据格式提供统一接口的总线通信协议的任何电子设备。这种电子设备的示例一般包括任何便携式电子设备,例如,蜂窝电话无线组织器、个人数字助理、计算机、膝上型计算机、手持无线通信设备、支持无线的笔记本计算机、平板计算机或电子阅读器、电子安全设备、无线互联网电器等。在本描述全文中,提供了其它示例。本文列出的作为移动设备的电子设备一般是便携式的,且从而是电池供电的并且可能具有有限的处理能力,在该情况下,使用提供了统一数据接口的总线通信协议(例如,本文描述的统一总线通信协议的至少一个实施例)是有益的,。
便携式电子设备10具有主体12,其包括显示屏14、键盘/键区16、按钮集合18和用户输入设备20(例如,轨迹板或轨迹球)。将理解:用户输入设备20代表用户操作的指向或输入设备,其也可以表现为操纵杆、滚轮、滑轮、鼠标或触摸板等或另一按钮。便携式电子设备10包括未示出或描述的其它部分,因为它们对于本领域技术人员来说是众所周知的。便携式电子设备10还包括用于接收插口的至少一个端口,但这并未在图1中示出。
现在参见图2,其中示出了便携式电子设备10的一部分的框图。便携式电子设备10还包括控制器30,其连接到被集成到便携式电子设备10中的芯片32(例如,头戴式耳机(headset)或头戴式听筒(headphone)接口)。可以使用处理器或专用电路来实现控制器30。芯片32包括开关矩阵和插口配置检测部34,其与用于接收与电缆40(例如,视频电缆或头戴式耳机电缆)相关联的插口38的端口36集成在一起。开关矩阵34包括多个单体输入和输出端口42,用于使用插口38内的对应电线和线路44a至44d来接收和发送信号。
插口38内的电线44a至44d表示信号线,例如音频线和视频线。单体线(通常是四根单体线)的集合(尽管具有其他数目电线的其它插口配置是可预期的)允许便携式电子设备10和位于电缆另一端的设备(例如,头戴式耳机)之间的通信。在一个实施例中,电线44a和44b可以是一对音频线,电线44c可以是地线而电线44d可以是麦克风线。然而,仅一根线用于通信,且由此用作单线总线实施例的通信总线。剩余线可以用于其他功能。通常,一根线将用于接地,而其余两根线可以用于头戴式听筒输出。在另一配置下,一根线可以用于总线通信,一根线可以用于接地,第三根线可以用于电源,而最后一根线留给其他用途,例如,单独的时钟线、用于视频信号的发送或用于其他功能。在其他实施例中,单线总线可以在设备之间的数字或模拟发送中使用。备选地,双线总线实施例对于在两个芯片之间提供通信是有用的,如下面将更详细描述的。
现在参见图3a,其中示出了总线系统50的示例实施例的原理图。总线系统50包括主设备52(例如,便携式电子设备或便携式电子设备中的头戴式耳机接口芯片)和从设备54(例如,头戴式耳机)。尽管仅示出了一个从设备54,应该理解:多个从设备可以耦合到总线系统50用于与主设备52进行通信。因此,本文提供的针对从设备54的描述一般可以应用于连接到总线系统50的其他从设备。
主设备52或从设备54可以包括集成电路间(I2C)接口56,其连接到基带处理器或其它移动处理单元。主设备52或从设备54还可以包括用于数字音频数据的I2C接口。针对I2C接口56和串行接口58的输入或输入信号60可以包括(但不限于):外部时钟信号60a(EXTCLK)、I2C时钟信号60b(I2C CLK)和I2C数据信号60c(I2C DAT)。低速串行接口58的输出经由电缆62(例如,同轴电缆)连接到从设备54。如上所述,电缆62内的电线或线之一提供了用于从设备54和主设备52之间的通信并可以被视为单线总线的总线64。可以在管脚或电线的数目是有限的或者为了与噪声免疫相关的高可靠性情况下使用总线64。在其他实施例中,可以使用双线总线。
在单线总线实施例中,单线可以合并多个功能,包括(但不限于):在单一总线循环中对时钟和数据这二者的发送。在操作中,I2C接口56通过总线64取回并向从设备54发送数据。在其他实施例中,通过总线64的通信可以经由去往基带处理器或另一处理单元的连接来控制。因此,对主设备52的控制可以经由I2C接口56、可以通过另一控制接口或作为去往基带处理器或其它处理单元的连接的一部分,该基带处理器或其它处理单元让主设备52执行各种操作,例如(但不限于):PING、READ(读取)、WRITE(写入)和FUNCTION(功能)命令或操作。在本文描述的至少一个实施例中,PING、READ、WRITE和FUNCTION命令可以不出现在同一帧中,因为每个帧仅由一个操作来定义。将在本描述的全文中更详细地描述这些操作。
主设备52生成分帧信息以允许从设备54或多个从设备与总线64同步。在一个实施例中,帧长度是由8比特寄存器来确定的,该8比特寄存器提供了在每个命令数据块的开始之间的分隔距离。在另一实施例中,测量的单位是等于四(4)个比特的半字节。帧长度由命令模式来确定,且在一个实施例中,在字模式下,帧长度可以是48字节,其中缺省同步分隔值28个半字节,由此导致帧长度384比特。
在操作中,在主设备52和从设备54之间通过总线64来发送同步(sync)信号、信息的控制信号、数据、时钟信号和功率。因此,总线64允许对多个外部设备的连续操作,且所有设备由相同时钟信号来同步。时钟信号可以用作内部电路的采样时钟(例如,∑Δ转换器),或用于复杂逻辑电路的连续操作。在其他实施例中,如下面将更详细解释的,当在总线64上没有活动时,可以存在将时钟信号保持在稳态电平的时刻,例如,静态低逻辑电平或静态高逻辑电平,以节约功率。
经由总线64通信的组件的大小可以通过使用本文描述的统一总线通信协议的至少一个实施例来降低。例如,如果在图2的便携式电子设备10中实现,统一总线通信协议允许总线64通过单线来发送时钟信号和数据,该单线减少了芯片32中占用的管脚数目,由此允许其他管脚端口42用于其他功能,以允许在印刷电路板(PCB)级别上减少芯片的总管脚数目、硅面积或成本。
现在参见图3b,其中示出了总线系统50的原理图,其示出了用于将主设备52耦合到总线64的接口电路70的示例。该原理图主要是针对单线总线版本,但是也可以用于双线版本中的数据线。类似的电路可以用于将从设备54耦合到总线64。接口电路70包括充电晶体管72、放电晶体管74、功率晶体管76和电阻器R1。充电晶体管72用于在总线64上声明逻辑“1”,以及放电晶体管74用于在总线64上声明逻辑“0”。当使用的电流比一般通过串联端接电阻器R1提供的电流更多时,功率晶体管可以用于对从设备(例如,电池)快速充电。在使用该布置的情况下,总线64不经受时间约束的实现,例如,开放式集电极和开放式漏极类型,其中,信令速度在功耗、噪声免疫和带宽之间折中。功率晶体管76是可选的,且在一些实施例中可以被包括以在没有通信时对设备充电并向外部设备供电。功率晶体管76可以由寄存器来控制,并在帧开始时被更新。
在本特定示例实施例中,充电晶体管72和功率晶体管76是PMOS晶体管,而放电晶体管74是NMOS晶体管。充电晶体管72的源节点耦合到供电电压BSS,充电晶体管72的栅节点耦合到低速串行接口58的第一管脚,以及充电晶体管72的漏节点耦合到放电晶体管74的漏节点。放电晶体管74的栅节点耦合到低速串行接口58的第二管脚,以及放电晶体管74的漏节点耦合到接地。功率晶体管76的栅节点耦合到低速串行接口58的第三管脚,功率晶体管76的漏节点耦合到供电电压VSS,以及功率晶体管76的源节点耦合到低速串行接口58的第四管脚和总线64的第一节点。电阻器R1的一个节点耦合到充电晶体管72的源节点和放电晶体管74的源节点,且电阻器R1的第二节点耦合到总线64的第一节点。在示例实施例中,电阻器R1的电阻可以被选择为使得接口电路70的输出电阻一般约为75Ohm且供电电压VSS可以是3V。
低速串行接口58连接到充电晶体管72的节点施加低电压,使得充电晶体管72可以在每个总线循环开始时对总线64充电。之后,总线64通过去激活充电晶体管72而变得浮置。然后主设备52可以通过对其栅极施加高电压来激活放电晶体管74(这将对总线64放电),从而驱动总线64。在电阻器R1之后通向总线64的连接用于从总线64接收数据(在一些情况下,可以包括延迟用于增强的设置/保持时序余量)。低速串行接口58耦合到功率晶体管76的节点用于向总线64供应比通过电阻器R1可用的功率更大的功率。这可以导致某些初始振铃(ringing),除非采取特定动作,例如,在晶体管72激活之后首先施加全功率(这将减小振铃)。
在一个实施例中,使用低-高-浮置循环模式来实现总线64,但是可以备选地将总线64实现为高-低-浮置模式。数据的实际传输发生在浮置周期期间,同时低-高(或高-低)周期用于传输功率和时钟同步。如果从设备54或主设备52想要信号通知逻辑零,该特定设备将把总线64保留在与之前相同的状态,即浮置且在总线64上具有相同值。从设备54或主设备52可以通过在浮置周期期间对总线64放电来信号通知逻辑一,由此将总线64的状态变为相反逻辑电平。信令方案的示例在图4a中示出,图4a示出了在总线64上的事务的时序图,其中,从设备54写入“0110”。通常向主设备52提供外部时钟信号(在备选情况下,主设备52可以生成时钟信号)。当主设备52或从设备54进入三态模式时,这如图4a中出于说明性目的由虚线所绘出。实际中,输出电压将由总线64上剩下的剩余电荷来确定。然而,一旦已对总线64进行放电,不管多少个设备尝试该放电,都将不存在任何电荷。因此该信令方案允许在多个设备尝试同时通过总线64发信号通知或通信时减少或避免总线竞争或拥塞,因此一旦总线64已被放电,则检测不到后续设备对总线64的放电且总线冲突是不可能的。
如图4a中示例所示,在总线64上实现时序,使得总线64在四个时间间隔中时间复用。在备选实施例中,有可能使用另一数目的时间间隔。对于图4a的示例,在第一时间间隔中,在时钟周期的头25%(即,四分之一)期间,主设备52将总线64驱动为有效低电平。在第二时间间隔中,在时钟周期的第二个25%期间,主设备52将总线64驱动为有效高电平。可以将由低到高时钟转换用作连续采样时钟信号。在第三和第四时间间隔中,主设备52在剩余时钟周期期间将总线64留在浮置状态,除非从设备54或主设备52将总线拉低以信号通知“1”。例如,在第三间隔中,从例如时钟周期的50~62%之间开始,从设备54可以将总线64拉到有效低电平。总线64通常可以在时钟周期完成之前完全安定(settled)。在接近时钟周期的结束处(例如,在时钟周期的88~100%)的第四间隔中对总线值采样,之后主设备52将开始再次驱动总线64为有效低电平。在一个实施例中,时钟循环的前半段可以用于时钟信号,而时钟循环的后半段可以用于数据发送。然而,对时钟循环的其它划分是可预期的,其中,时钟循环的第一部分用于时钟信号,且使用循环的第二部分用于数据发送,例如67%用于时钟信号,然后33%用于数据发送。
在图4a的示例中,总线64初始时在时钟循环的开始处为有效低电平。在特定时间段之后,由主设备52将总线64驱动为有效高电平。由于从设备54希望发送“0”,从设备54不对总线64作任何事情。然后下一时钟循环之前,在主设备52将总线64驱动为有效低电平之前,主设备52和从设备54读取值“0”。在第二时钟循环期间,主设备52在特定时间段之后将总线64驱动为有效高电平。由于从设备54希望发送“1”,从设备54将总线拉动或驱动到有效低电平,其中,由主设备52和从设备54来读取值。由于总线64是有效低电平,主设备52不一定将总线64驱动到有效低电平,尽管其可以如图4a所示执行该功能。在第三时钟循环,在特定时间段之后,主设备52将总线64驱动为有效高电平。由于从设备54希望发送“1”,从设备54将总线64拉动或驱动为有效低电平,其中,然后主设备52和从设备54读取该值。在第四时钟循环的开始时,总线64是有效低电平,且在特定时间段之后,被主设备52驱动为有效高电平。由于从设备54想要发送“0”,在总线64上不存在活动,直到在已读取了值之后为止,然后主设备52将总线64驱动为有效低电平,以准备下一个时钟循环。
在主设备52将总线64驱动为有效低电平的时段期间,总线时序允许从设备54继续将总线64拉到有效低电平。因此,从设备54的输出驱动器的释放时序不是那么严格的。然而,从设备54在主设备52将总线64驱动为有效高电平时生成包括线路延迟在内的浮置输出。由于从设备54依赖于主设备52的时序,浮置周期长于有效低电平周期和有效高电平周期的原因是为了当激活开始时允许从设备54在与主设备52相同的时间量中将总线64驱动为有效低电平,并允许对时刻的某种容忍性。此外,在总线64上存在延迟。
当主设备52将总线64拉低时的时序是在特定时间段之后,使得主设备52或从设备54不对不正确的数据采样。因此,从设备54在主设备52将总线64拉高时具有浮置输出。
当主设备52或从设备54进入三态时,这由虚线来表示,即使实际电压将由向总线64写入的之前的值来确定。由于总线64浮置所在的周期非常短,其可以由于耦合到总线64的寄生电容而保持稳定,或可以通过在系统50内包括至少一个总线保持器来保持稳定更长的时段。因此,如果静态无负载或加载高阻抗,则总线64上的电荷和电压可以被视为是稳定的。
从设备54以特定时间间隔来激活总线64,其可以通过实现本地时钟、使用PLL、延迟锁定环路(DLL)或简单延迟电路来进行。延迟电路可以包括两个电容器,这两个电容器由固定电流交替充电,然后使用电容器上的充电电压来确定应当对总线64进行激活和采样的点。可以从一个固定时钟沿到下一个固定时钟沿对这两个电容器进行充电,且在开始该循环之前放电。在不传输信息的长周期期间,有可能通过将时钟信号选通为高电平,令总线64进入空闲。在该情况下,将存在小延迟,以重启总线64。由于主设备52控制时序,一般不使用任何模拟控制的延迟。
一般而言,使用足够小的总线电容和充分高的时钟频率,以使得独有定义在浮置(或三态)周期期间总线64的状态读数。如果将总线系统50实现在印刷电路板上,在一些实施例中,可以使用小电容器来提供显著大的电荷,以防范数据错误。在该情况下,使用总线保持器(例如,使用背靠背耦合的两个反相器)来使用(或备选地实现)小但是有穷的总线电容,以维持稳定的总线值。可以针对总线64的低频操作来选择该方法,其中,小的泄漏电流可以将总线64上留下的任何电荷进行缓慢放电,但是总线保持器将保持该值稳定。总线保持器一般将实现在主设备52中,以限制与其操作相关联的功率效率损耗,但是也可以出于数据完整性目的而实现在从设备54中。在表1中示出了何时使用单线来实现总线64的示例实施例的时序特性。
表1:单线总线的时序特性的示例
如果使用2MHz的较低时钟频率(一般建议6MHz时钟频率)可以作出对总线64上的最大扰动的估计。假定最大泄漏电流10μA,周期1μs,且线路电容100pF,则最大压降等于约0.05V。当进一步增加时钟频率,噪声免疫增加。主设备52的输出阻抗约为75±12Ω,以匹配75Ω的发送线路。当在发送线路的端部接收时,反射将立即把电压带到全电平,且具有对偏移率很少的影响。在这些特性的情况下,噪声免疫将比I2C类型实现的噪声免疫更好。对于2米长的电缆,电缆延迟的估计约为10ns(延迟大约20cm/ns)。将75Ohm电缆用于实现总线64具有以下优点:比50Ohm电缆具有更低的单位长度电容,以及更低的电力损耗。在表2中示出了在使用单线时总线64的示例实施例的电特性。
表2:单线总线的电特性的示例
当在具有双线实现的总线上实现统一总线通信协议时,可以在单独电线(即,时钟线和数据线)上发送时钟信息和数据信息。在该情况下,在从设备54内可以不使用延迟电路,且使用两个时钟沿的内部时序电路将具有更好的抖动性能。该总线结构适合PCB上的实现,在PCB中,管脚要求较不严格。在实施例中,用于信号通知的方法可以是NRZI信令,即通过在总线64上维持电平来信号通知逻辑零,同时通过在总线64上改变电平来信号通知逻辑一。
现在参见图3c,其中示出了双线总线系统的示例实施例。在该示例中,主设备1通过低速串行接口耦合到I2C接口、TDM接口、比特流接口、和I2S接口。主设备1然后经由双线总线耦合到从设备1、从设备2和主设备2,该双线总线可以根据本文描述的统一总线通信协议的至少一个实施例来工作。双线总线具有携带时钟信息的第一线和携带数据、同步和命令信息的第二线。在该示例中,每个从设备1和2以及主设备2经由低速串行接口耦合到总线。从设备1还耦合到第二比特流接口。从设备2还耦合到第二I2S接口。主设备2还耦合到第二I2C接口和第二TDM接口。
当使用具有分离的时钟线和数据线的双线总线时,时钟信号将仅提供与在数据线上信号通知的信息何时有效或何时无效相关的时序信息。在一些情况下,可以在单一时钟沿或全部两个时钟沿上传输信息。在一些情况下,数据线上的信息可以在单时钟循环内改变多于两次,以减少时钟线的功耗。
现在参见图4b,其中示出了在使用双线实现总线64时的示例时序图。当使用具有双线的协议时,有可能仅在一个时钟沿上传输数据,也有可能在全部两个时钟沿上传输数据。使用两个时钟沿的优点是其允许更高的带宽和更低的电流消耗。然而,一旦已选择了接口的物理特性,则存在与总线半径相关的约束。如果使用仅一个时钟沿,只要减低时钟频率,就有可能使用非常长的总线半径。然而,当使用两个时钟沿时,位于主设备52附近的从设备可能在它们对来自远离主设备52的从设备进行采样之前就开始输出数据。一种解决该问题的方式是确保针对在之前数据时隙中已处于三态的设备在总线64上启用数据之前的时间长于让设备从数据状态进入三态所花费的时间。此外,可以通过将向总线64输出数据的计时(clock)延迟一点,同时在时钟沿上对来自总线64的数据立刻计时,来改进时序余量。在一些实施例中,可以调整时序余量,以依赖于时钟频率,从而实现高频上的操作或实现具有大总线直径的操作。作为示例,在针对低频操作的时钟转换之后,可以将数据保持稳定更长的时间。在其他情况下,可以判定将固定参数用于时序余量,并将具有每隔一个空白信道的比特流模式(高效三态)用于具有大的总线半径的系统,以避免在两个从设备在不同事件接收时钟信号时的问题,该问题可能导致位于主设备52附近的一个从设备将来自位于远离主设备52的从设备的结果加以覆盖。在备选实施例中,可以将不同结构用于将从设备54连接到总线64,例如,环形结构或管道结构。参考图71至76来更详细地描述这些结构。在一些实施例中,主设备52可以包含针对管道或环形结构的直接连接;在其他实施例中,集线器设备可以担当单线或双线多支路总线与备选管道或环形拓扑之间的接口。
与I2C实现和类似的开放式集电极结构实现相比,双线总线的该实现降低了功耗,并且不导致I2C实现和类似的开放式集电极结构实现的情况下带宽和功耗之间的折中。在一些情况下,与SLIMbus相比,使用统一总线通信协议的总线64的双线实施例导致了40%的功耗降低,以及使带宽加倍。此外,在一些实施例中,可以将与SLIMbus中使用的相同物理层用于实现统一总线通信协议。
在至少一些实施例中,可以在主设备52中实现总线保持器。在存在少数几个从设备和存在很多从设备的情况下,这给出了可预测的噪声性能。当不对连接到总线64的设备施加功率时,即使没有功率的设备依然连接到总线64,应当依然有可能操作总线64,例如,(静电放电)ESD结构不应当在没有施加功率时使总线暂停。在表3中示出了在使用双线时的总线64的示例实施例的电特性。
表3:双线总线的电特性的示例
关于功耗,如果假定对于双线总线实施例,数据在一个时钟沿上改变,则与双线总线实施例相比,由于容性充电导致的动态功耗对于单线总线实施例将更低。每个发送比特所使用的状态改变对于单线总线实施例将是二(即,信号上升和下降),而双线总线实施例将平均使用由于时钟信号上升和下降导致的21/2个信号改变,且数据信号平均每隔一次发生改变。单线总线实施例允许在时钟信号中携带附加数据信息,而无需任何额外功耗(即,对线路的额外充电),因为信号可以是负载循环调制的。这是在将时钟线和数据线合并到单一线路时的示例,用于通过减少信号转换的数目来减少端子数目并减少功耗。在其他实施例中,还可以对单线总线进行电平调制,以针对每个时钟循环传输更多比特。然而,如果数据在双线总线实施例的两个时钟沿上都改变,则由于双线总线实施例针对每个发送比特将仅使用11/2个状态改变,即,一个时钟改变和平均1/2个数据信号改变,因此其将更为节约功率。
应当注意到:由于功耗随着连接到总线64的设备数目线性降低,因此让尽可能少的设备连接到总线64在功率方面应当是更有效率的。如果多个设备可以连接到单线总线线路,减少每个设备的输入电容以降低作为结果的功耗可以是有利的。备选地,可以存在以下实施例:其中,使用多于一个总线,使得一些设备耦合到一个总线,且其他设备耦合到另一总线,且存在对于两个总线共同的设备,例如主设备。
一般而言,从设备54可以通过在PING操作期间主动拉低信号,指示其希望与主设备52通信。在该情况下,则可以经由读取、写入或功能操作在从设备54和主设备52之间发送数据。主设备52也可以主动发起读取、写入或功能操作。为了发起通信,主设备52和从设备54如下文更详细描述的彼此同步。
在统一总线通信协议的示例实施例中,将帧定义为包括三个控制字:同步字(即,S字)和用于向从设备传输命令和从从设备传输命令的两个命令字(即,X字和Y字)。控制字可以是16比特长,且一般在每个帧期间发出。在其他实施例中,控制字的长度可以是某个其他长度,例如8个比特,且帧中的控制字的数目可以不同于三。然而,可以根据操作模式(例如,字模式和比特流模式)在帧期间以不同方式发送控制字。例如,在字模式下,控制字之间的距离可以变化,使得能够支持不同的过采样比和时钟频率。在比特流模式下,在每个控制字的单体比特之间交织数据比特;该数据交织的一个好处是支持多个低时延比特流数据信道。
在示例实施例中,主设备52执行若干控制功能,包括:状态监视(即,PING操作)、读取寄存器(即,读取操作)、写入寄存器(即,写入操作)和执行功能(即,功能操作)。操作的类型由主设备52来确定。在一些实施例中,主设备52由系统控制器(未示出)来控制。在这些情况下,主设备52和系统控制器之间的接口可以使用I2C总线来实现,或通过将这两种系统组件集成在一个设备(即,处理器)中来实现。
为了与从设备54通信,主设备52发送具有同步数据的同步(即,sync或S)字,从设备54(或多个设备)可以使用该同步数据与主设备52同步其内部时序或时钟,并因此也与总线64同步。一般而言,主设备52在帧中发送的第一个控制字是S字。因此,S字可以用于发起帧的开始。发送的第一比特是S15比特,之后是S14比特,依此类推。在字模式下,比特将彼此紧跟,而在比特流模式下这些比特的发送之间将存在恒定间隙。输入/输出(I/O)方向(例如,r/w)是相对于主设备52给出的。
现在参见图5,其中示出了S字的字段和比特分配的示例实施例的图。在该示例中,S字包括四个字段:数据同步字段、九比特恒定同步符号字段、动态同步符号字段、以及中断字段。其他实施例可以将其他字段用于S字或将或多或少的比特用于图5所示的字段。可以使用寄存器的一个或多个比特来实现这些字段。在备选实施例中,可以将不同实现用于这些字段,字段可以按不同方式排序,或可以存在使用的其他字段或使用的其他寄存器。
S字的数据同步字段包括奇偶性比特PAR(S15)和应答比特ACK(S14)。对奇偶性比特的计算是基于总线64上遭遇的所有业务,包括从上一个写入的奇偶性比特开始,且包括在写入新的奇偶性比特之前的最后一个比特(即,奇偶性可以针对全帧来计算)。如果帧中等于1的比特的总数是偶数,则奇偶性比特设为一;否则奇偶性比特设为零。主设备52在上电时的初始奇偶性值是零。在至少一个实施例中,主设备52可以针对所有操作(PING、读取、写入和功能)来写入奇偶性信息,以确保连接到总线64的任何设备可以检测到信号完整性问题或数据冲突。
应答比特是基于总线64上的上一帧的业务来计算的。如果针对从设备54的数据发送在读取、写入或功能操作期间受到破坏,则从设备54应当信号通知逻辑低。如果奇偶性没错误,从设备54将响应以逻辑一。这对于在I/O写入操作期间增加安全性是有用的。基于过去的操作,从设备54设置应答比特,因为其知道错误是否已发生,例如,奇偶性比特错误或总线错误发生。如果总线64上不存在从设备,将从总线64返回逻辑低,通过总线信令方案的特性向主设备52指示问题。如果前一操作是PING操作,基于奇偶性比特和过去帧的整个活动而检测到错误的任何从设备可以激活该比特(即,写入逻辑一)。这意味着应答比特在PING操作期间有效反转(逻辑零意味着无错误)。如果检测到错误,主设备52可以在读取、写入或功能操作之后针对丢失ACK比特来激活IO错误比特,以及针对在PING操作期间的NACK激活总线错误。在作为示出了字模式下针对S字的数据同步字段的操作的时序图的图6所示的示例中,主设备52基于在时隙0~95中的活动在时隙96中写入偶数奇偶性。从设备54在时隙97中进行响应。在读取、写入或功能操作期间,从设备54将仅在错误的情况下进行响应(即,通过NACK)。
现在参见图7,其中示出了由主设备52和从设备54基于不同命令操作进行的奇偶性和应答计算的示例实施例。如果奇偶性中不存在错误,被寻址的设备将响应以逻辑一(即,活跃动作)。这对于在I/O写入操作期间增加安全性是有用的。如果在从主设备52到从设备54的写入操作期间存在奇偶性错误,从设备54在存在奇偶性错误的情况下内部不完成写入操作,且主设备52将向总线控制器响应以IO错误中断。如果在来自从设备54的读取操作期间存在奇偶性错误,主设备52将生成IO错误IRQ,同时从设备54在主设备52未接收到活跃ACK的情况下将什么也不做。通过读取设备寄存器和上一个写入的字,有可能识别哪个设备出了问题。在执行新的读取、写入或功能操作之前,在一个实施例中,有可能进行等待直到完成当前IO操作为止,且有可能检查IO错误比特的状态。该方法提供了更鲁棒的错误性能。
因此,统一总线通信协议的至少一个实施例的方面是通过以下方式来提供数据完整性支持:监视帧内发送的所有数据,计算发送数据的奇偶性,并检查来自连接到总线64的接收到执行读取/写入/功能操作的命令的一个或多个从设备针对该操作的应答。主设备52可以执行监视、计算奇偶性和检查动作。
在一些操作期间,例如PING操作期间,没有特定单一设备被寻址。因此,任何设备可以检测奇偶性错误。然后主设备52将在其完成读取帧时写入奇偶性比特,且检测到奇偶性错误的任何设备将响应以逻辑一,这具有与NACK(不应答)相同效果的功能。这允许多个设备同时进行响应,因为单线实现和双线实现的总线64都允许“线或”(wired-or)功能。一般而言,除了使用功能数据的命令(可以将该命令类似于针对特定设备或设备组的读取和写入操作一样来对待)之外,可以将功能(FUNCTION)操作类似于PING操作一样对待,。
因此,统一总线通信协议的至少一个实施例的方面是通过以下方式来提供数据完整性支持:监视帧内发送的所有数据,计算发送数据的奇偶性,并检查来自连接到总线的接收到执行除了读取、写入或功能操作之外的操作的命令的一个或多个从设备的针对该操作的不应答消息。主设备52可以执行监视、计算奇偶性和检查动作。
在至少一些实施例中,从设备54可以使用恒定同步符号字段(S13:S5)来快速消除帧内的大多数伪同步位置,同时动态同步符号字段(S4:S1)用于验证当前位置确实是帧的开始(应当注意到,本文使用的命名法S13:S1指示了比特S13、S12、S11、S10、S9、S8、S7、S6、S5、S4、S3、S2和S1)。该方案用于获得快速锁定时间并有助于避免从设备54锁定到由总线64上随机静态数据创建的伪开始。例如,以下九个比特{S13:S5}=“101100011”是可以用于由从设备54在随机总线数据上获得快速初始同步的常量。因此,S字的恒定同步部分由从设备54用来降低帧内的伪S字的似然率。例如,可以由其他从设备通过总线64发送数据,其表现得好像S字一样,但是由于其并不是由主设备52发送的,其是伪的,并且应当被非连接的从设备所忽略。因此,对S字的恒定部分的值的选择(即,恒定同步符号字段)使得其是不经常出现在数字字、音频数据或比特流数据中的比特模式,使得将其用作S字不受到破坏。
动态同步符号字段(S4:S1)包括可以由伪随机计数器(例如,循环冗余校验(CRC)生成器)使用生成器多项式X4+X+1、X8+X5+X4+1或者X15+X14+X10+X8+X7+X4+X3+1来实现的伪随机值,其由从设备54用于同步。例如,可以如下更新动态同步符号字段(首先是最高有效位(MSB)):{S4,S3,S2,S1}={S3,S2,S1,(S4XOR S3)}。在该示例中,在重置时将动态同步符号字段初始化为“1111”。不使用“0000”条件,且如果曾遇到了“0000”条件,则“0000”条件在下一个循环期间应当导致“1111”状态。十六进制下的整个序列如下:{F,E,C,8,1,2,4,9,3,6,D,A,5,B,7}。
在至少一些实施例中,伪随机值也可以用于同步,这将允许更快速的锁定时间,并减少从设备54锁定到由总线64上的随机数据创建的伪S字的似然率。在至少一些实施例中,从设备54可以在锁定到总线64上之前多次验证该伪随机模式。在至少一些实施例中,在允许从设备54在总线64上通信之前,从设备54可以等待,直到其验证了整个同步生成器循环为止。从设备可以用来进行检测直到其判定其已获得了与主设备52同步为止的同步模式的数目是以下问题:伪同步的错误的概率多低是可接受的。例如,如果从设备54在接受锁定之前使用了N个帧,则这在随机数据的情况下发生的可能性是15-(N),这是非常小的概率,且在实际中甚至更低,因为恒定同步部分通常是均匀间隔的,且也在同步期间被发现。因此,在声明同步(即,锁定)被视为是安全的之前,在不同应用中可以使用更少或更高数目的同步模式(以及因此可以使用更少或更高数目的帧)。在备选实施例中,从设备54可以使用7个帧来锁定到总线64上。在其他实施例中,可以将不同数目的比特用于恒定同步部分和动态同步部分。在备选实施例中,可以使用其他技术来生成动态同步符号字段的内容。
取决于对总线64的使用,例如,用于发送数字字数据、发送比特流数据等,可以使用不同的值或方案来生成恒定同步符号字段和/或动态同步符号字段的值。作为示例,当总线64在字模式下使用时,S字的恒定部分可以是0xB25(十六进制),以及当总线64在比特流模式下使用时,S字的恒定部分可以是0xFFE。
在S字中包括中断字段(IRQS(S0)),以实现优先化的中断控制,且可以实现对很多使用场景的中断请求的快速响应。从设备54可以在帧期间向主设备52生成中断。如果从设备54想要引起立刻注意,其在中断字段中(在本示例实施例中,其在S字的最后比特期间)信号通知逻辑“1”电平。IRQ比特用作通用中断控制,且可以由任何从设备在任何帧期间激活。例如,如果从设备54具有要发送的重要状态消息,则IRQS比特可以用于延迟读取、写入或功能操作。这是通过在中断字段中激活该比特来进行的。如果没有从设备激活该比特(逻辑“1”意味着激活)或如果IRQS中断被IRQ掩码比特B4(S0延迟启用-参见图29a和29b)所禁用,则读取、写入或功能操作将继续下去。如果从设备54具有等于“10”或“11”的状态电平,则激活延迟(这在下面将更详细地描述)。因此,在帧中的该IRQS比特的时隙期间,从设备54可以将其状态寄存器中的MSB的内容(其保持从状态比特)复制到总线64上。在X和Y字的描述中进一步讨论该从状态比特。在X和Y字的部分中包括从状态数据允许在从设备之一出现错误的情况下,收集来自其他从设备的数据,同时不禁用总线64。另一方面,如果IRQS比特的值未激活或如果如IQR掩码比特所确定的那样不允许IRQ(在该情况下,使用PING操作来轮询耦合到总线64的设备的状态),则读取、写入或功能事务/操作被允许继续下去。图8示出了命令操作(PING、读取、写入和功能)、中断掩码比特的值和应当采取的动作的各种组合。
在本示例实施例中,帧内的控制操作的类型(即,PING、读取、写入或功能操作)由X字的头三个比特来确定。这些比特之后是特定操作所使用的信息。在PING操作的情况下,寄存器堆组选择比特可以用于确定从设备54的配置模式;对于音频应用,这可以被称为音频模式,其可以用于在不同音频模式之间无缝转移,且该转移在作为结果的音频中是听不到的。可以包括数据同步比特,以使用从设备54中的很少硬件来支持奇数采样率和异步传输。后续比特被分组为对,且用于读取连接到总线64的所有设备的当前状态。在其他实施例中,通过包括请求总线比特和释放总线比特来实现对多主操作的支持,该请求总线比特可以由另一主设备来激活,该释放总线比特许可对总线64的访问。在该类型的操作中,真正的多主(multimaster)操作是可能的,因为两个主设备都可以在X和Y命令中同时写入命令。如果存在总线冲突,写入零但是读回一的设备将丢失仲裁权。通过将PING操作分配给“000”,有可能将真正的多主操作与对总线64的连续监视相结合(即,如果主设备请求读取/写入或功能,则执行PING操作的另一主设备将丢失仲裁权)。
读取、写入和功能操作向连接到总线64的一个特定设备发出信息。在本示例实施例中,为独有从地址分配的比特数目是4个比特。其他实施例可以将更多或更少的比特用于从地址。实际地址可以在上电之后动态指派,以防止地址冲突发生,即只要最多16个设备同时连接到总线64就行(尽管一般使用高达十一个设备)。这四个比特之后是寄存器地址和数据信息。地址和数据字段长度一般取决于操作的类型(8或16比特数据),且将延伸到Y字中。主设备52写入器基于当前数据传输计算出的奇偶性,且从设备54对成功的操作进行应答。该奇偶性验证方案给出了额外的安全性,因为主设备52和从设备54都将了解另一设备是否未能接收正确数据。
功能操作可以用于各种目的。例如,在至少一个实施例中,功能操作用于将从设备54设为特定状态、请求关于特定设备的信息或用于测试。
现在参见图9a,其中示出了用于各种命令操作的X命令字的各个字段和比特分配。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,可以将不同实现用于这些字段,该字段可以用不同方式排序,或者可以存在使用的其他字段或使用的其他寄存器。相对于主设备52来定义读取(r)和写入(w)方向,即,(w)意味着数据流的方向(即,传输或发送)是从主设备52到从设备54,且(r)意味着与(w)操作相比相反的数据流方向。X字的结构将取决于当前正在进行什么操作。图9a提供了一些示例组合。在该示例中,X命令字包括命令字段两个数据同步字段、从设备字段、堆组选择字段、地址字段、从状态字段和功能字段。如将描述的,这些字段中的一些字段仅在特定命令操作期间使用。在下面讨论功能操作时将描述功能字段。一般而言,头三个比特(X15~13)是命令字段的指示主设备52正在发出的命令的部分,例如读取、写入、PING、功能或其他命令,而剩余比特的结构将取决于所选择的命令。图9b提供了可以使用的X字的备选实施例。该编码具有以下优点:有可能以解码时的某种复杂度以及堆组比特的激活为代价,在任何操作模式(PING/读取/写入/功能)下执行异步、小数或多帧数据传输。
关于命令字段(X15:X13),在至少一些实施例中,在本示例实施例中命令可以是8或16比特读取/写入操作、PING操作或功能操作(在其他实施例中,可以使用更多或更少的比特)。一般而言,PING命令始终是激活的,除非主设备52接收到读取、写入或功能命令,且当前正在处理它。
在一些实施例中,X12比特可以是堆组比特或堆组字段,其在PING操作期间使用。当发出PING命令时,主设备52使用堆组比特来指示:针对数据传输的内部时序,应当将哪个寄存器堆组用于所有设备。在音频应用中,堆组字段可以用于在两个寄存器堆组之间切换,以在改变音频模式的同时避免在回放期间的任何小错误(glitch)。一般而言,堆组字段可以用于在不同寄存器堆组之间切换,其规定了在帧期间用于数据发送的不同数据模式的不同帧格式。不同数据模式可以针对不同的音频场景来规定不同的采样率、不同的信道选择、不同的端口选择、使用比特流模式还是字模式等等。例如,在一个数据模式下,来自数据信道的数据可以定义为被放在帧内的第一时隙集合中,且在第二数据模式下,来自相同数据信道的数据可以定义为被放在帧内的第二时隙集合中。在不使用PING操作的帧期间,堆组字段的前一值可以用于寄存器选择。当正在对从设备54寻址时,其使用堆组字段来选择在哪个寄存器堆组上执行读取、写入或功能操作。从设备54可以将至少一个影子寄存器用于在多于一个数据操作模式下发生改变的所有寄存器。其可以用于在内部寄存器和/或内部程序之间进行选择。为了提供针对错误的鲁棒性,在改变发生之前,可以使用相同值来读取堆组字段多于一次,例如两次。
在至少一些实施例中,为了提供针对错误的鲁棒性,在改变发生之前,可以读取堆组选择字段多于一次,例如两次,以确保在至少两个连续帧中该字段中存在相同值(即,在本示例中,寄存器堆组的改变将花费至少两帧)。
在读取、写入和功能操作期间使用从设备字段(X11:X8)。从设备字段规定了连接到总线64的从设备的地址。所有从设备在上电之后使用地址零与主设备52通信,之后主设备52将向它们指派新的地址。具有地址0~12的从设备可以向主设备52传输全状态信息。在本示例实施例中,地址15被预留用于向连接到总线64的所有设备广播信息。该广播对于例如使用一个命令来重置所有从设备可以是有用的。
数据同步字段(X11~10中的DS0~DS1)可以用于在若干帧上同步数据,且在PING操作期间发送。从设备54可以选择该字段以同步内部计数器的开始,该内部计数器选择何时开始发送数据。如果从设备54使用数据同步比特DS0或DS1,且其被设置为一,从设备54重置其内部计数器(这可以出现在正常帧开始处),否则如果DS0或DS1被设置为0,这些内部计数器不被重置。这对于同步最适合若干帧的数据发送(例如,针对小数流)是有用的。
在PING操作期间使用比特请求(REQ)总线访问(X9)。通过激活该比特(将其设置为等于一),另一主设备可以请求对总线64的访问。
在PING操作期间使用比特释放(REL)总线(X8)。如果当前主设备激活该比特(用于反转逻辑的逻辑值零),另一主设备被允许开始向总线64发出命令。如果当前主设备52选择同时发出命令,则它可以这么做。如果在两个主设备之间存在竞争,则数据仲裁将确定谁赢得了针对特定命令的请求。如果另一主设备忽略了释放总线比特并在该字段不活跃时(例如,逻辑一)开始写入命令字,这将被视为总线错误。
在备选实施例中,如上所述,可以将X12~X9比特用于数据同步(DS0~DS3)。此外,X8比特可以用作如上所述的堆组比特(例如,参见图9b)。
在读取、写入操作和某些功能操作期间使用地址字段(X7:X0),且地址字段(X7:X0)是用于选择从设备54内特定寄存器地址的较低八个比特地址。如果使用16比特操作,可以假定较高8个比特为零。
在PING操作期间使用从状态字段(X7:X0),且从状态字段(X7:X0)提供了一部分从设备ST11至ST8的状态(如将要描述的,剩余状态信息在Y字中提供)。在本示例实施例中,所有从设备包括由两个比特构成的状态寄存器。状态寄存器的值用于确定主设备52针对给定从设备应当采取哪种动作。每个从设备通过在X和Y字中向每个从设备的专用时隙进行写入来响应以状态信息。在本示例中,状态比特的总数是24,且从设备首先发送最高有效状态比特。状态比特可以根据中断掩码比特的值来生成主中断。在上电重置事件之后,所有从设备将在从地址零上开始响应,以信号通知它们刚连接到总线64。在其他实施例中,如果存在使用的更多状态等级,则从设备的状态寄存器可以具有多于两个比特。
在本示例实施例中,使用两个比特,从设备54可以具有四个不同状态等级。状态等级“00”是最低状态等级,且是在从设备54首先连接到总线64但并未锁定到总线64(即,未同步到主设备52)时从设备54内的初始值。(由于在本示例实施例中使用的信令方案)仅逻辑一将影响总线64的物理操作,因此该状态值将使得总线64不变。状态等级“01”信号通知了从设备54已锁定到总线64上,且可以用于检测从设备54与总线64何时连接和断开连接。这可以通过以下方式来监视:读取从状态等级并使用连接(ATTACHMENT)比特来启用中断。该值影响PING操作。状态等级“10”用于在从设备54锁定到总线64之后请求注意从设备54(例如由于缓冲区等级或错误状况)。该状况可以通过启用注意(ATTENTION)中断掩码比特来监视。如果S0和S0延迟IRQ掩码比特同时活跃(即,“1”),该状态等级将延迟读取、写入或功能操作。状态等级“11”信号通知从设备54具有紧急状况,该紧急状况可能必须快速处理,例如(但不限于):从设备54的温度过热或从设备54处存在严重电压不足或电压过高。该状况可以通过启用注意IRQ掩码比特来监视。如果S0比特和S0延迟IRQ掩码比特同时活跃(即,设为逻辑电平“1”),该状态等级也将延迟读取、写入或功能操作。
现在参见图10,其中示出了针对各种命令操作的Y命令字的各个字段和比特分配。Y字的结构也将取决于当前进行什么操作。一般而言,Y字用于在主设备52和一个或多个从设备54之间传输数据和可能的地址信息。图10提供了一些示例组合。在该示例实施例中,Y命令字包括地址字段、写入数据字段、读取数据段和功能字段。如将要描述的,这些字段中的一些字段仅在特定命令操作期间才使用。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,不同的实现可以用于这些字段,这些字段可以按不同方式排序,或者可以存在使用的其他字段或使用的其他寄存器。功能字段将在讨论功能操作时描述。
地址字段(ADDR 7~0)是八比特地址,其可以与X字中的地址字段一起用于形成从设备54的16比特地址。
写入数据字段(WD15:0)包括来自主设备52的要被写入到从设备54中寄存器的数据。对于16比特写入操作,使用整个字WD15:0。对于8比特写入操作,仅使用WD7:0。寄存器WD15:0可以由主设备52的外部控制来设置。
读取数据字段(RD15:0)包括要从从设备54读取到主设备52的数据。对于16比特读取操作,使用整个字RD15:0。对于8比特读取操作,仅使用RD7:0。寄存器RD15:0可以由主设备52的外部控制来读取。
现在参见图11a,其中示出了X字中的功能和对应比特设置的示例列表。在其他实施例中,可以使用其他功能和/或比特设置。例如,可以存在使用图11a中列出的功能的不同子组合的其他实施例。这些实施例可以添加其他功能、移除某些功能或同时添加某些功能并移除其他功能。功能操作可以用于开始执行特殊命令,该特殊命令对于控制系统功能和设备控制是有用的。一些功能支持广播,即所有端口(例如从设备)受到该命令的影响。对于图11a中定义的所有功能,X字中功能字段的上部比特(X7:X4)等于0000。如果尚未实现功能,从设备54不应当对来自主设备52的对应请求进行应答(ACK)。如果主设备52正在向多个从设备写入,则在本示例实施例中从设备可以代之以使用不应答(NACK)。
执行请求ID功能(X3:X0=0000)用于唯一识别系统中使用的主设备52或用于在连接到总线64的多个从设备之间进行区分,使得主设备52能够在这些从设备之间区分并为它们中的每一个指派独有的单体从号码(例如,1~14)。这实现了对若干从设备经由总线64同时连接到主设备52的支持,并避免了地址冲突问题(这在I2C总线协议中是常见的)。每个从设备具有制造商部件ID。该名称将包含制造商代码和部件号。在至少一些实施例中,在仲裁期间将制造商代码用于向连接到总线64的每个从设备指派单体设备地址。如下所述,可以通过添加位置信息来处理从设备具有相同部件号的情形。
在总线64上发生了重置事件之后,所有从设备将通过在从地址零(即,寄存器地址0x0000)上寻找设置信息来开始。如在本描述中稍后描述的动态地址指派过程中描述的一样,主设备52将通过向地址零写入,然后从该地址读取,来发起地址仲裁过程。由于仅存在单一主设备52,当从主设备52读取时,位置字段将等于“0000”。
在上电重置事件之后,所有从设备将其设备地址设置为零,且主设备52与从设备通信以向它们指派地址。在从设备54已锁定到总线64上之后,其将在PING操作期间指示状态“01”或更高状态,且主设备52将发现新设备刚刚连接到总线64。主设备52将通过激活请求ID功能来开始仲裁过程。当从设备54接收到该请求时,其启用内部名称字符计数器,该内部名称字符计数器用于对与从设备54相关联的内部识别(即,独有名称)进行编码。在此刻尚未锁定到总线64的从设备将不被激活,且在该仲裁循环期间将不响应。此外,如果没有从设备当前连接到总线64,主设备52继续完成该帧,然后在下一个帧循环中发出另一PING操作。
随后,主设备52将从从设备零的寄存器地址零读取。取决于具体实现,这可以使用16比特或8比特读取操作来进行。返回的值将是连接到总线64的具有从设备地址零的任何从设备的最高值部件ID(即,独有名称)的部件号。主设备52读取寻求被分配独有地址的所有从设备的独有名称的第一比特。然后检查每个从设备的独有名称的第一比特。如果它们都是相同的,即全“1”或全“0”,则主设备52进行(或轮询)从设备名称的下一个比特。如果存在“0”和“1”的组合,则主设备52仅对具有“1”的独有名称继续,这是因为由于总线64的动态本质,具有“1”的独有名称将确定总线值。换言之,如果存在多于一个从设备连接到总线64,尝试写入逻辑零但是读回逻辑一的任何从设备将回退,并等待下一个仲裁循环开始。主设备52继续从地址零读取,直到从设备54指示部件ID完整。这可以由零字节(即,0x00)来指示。然后主设备52通过设置数据比特3:0,向寄存器地址零写入所需的设备号,以向该从设备指派单体设备地址。主设备52稍后可以通过向当前设备地址写入并将寄存器地址零处的比特3:0设置为所需值,来改变从设备的设备地址。可以使用短编码格式,该短编码格式仅将四个字节用于编码ID。如果从设备接收到除了来自地址零的读取之外的IO请求,在其完成该读取序列之前,其可以回退并终止该过程。
动态地址指派过程允许主设备52以“字母顺序”来检查设备的独有名称,其中,具有较高数值名称值的从设备在具有较低数值名称值的从设备之前或之后被指派从地址。从设备名称的数值值是根据基于对作为二进制数读取的值的搜索进行排序来确定的。如果仅存在单一“1”值,则主设备52将与该独有名称相关联的从设备指派为第一设备,并向其指派独有从值1~14。在至少一些实施例中,仅将设备值1~11用于实现对所有连接设备的连续监视,同时将设备值12~14预留用于设备分组。然后进行到返回总线通信,其中,其将遭遇到要求地址的下一个从设备,并指派与第一从设备不同的从设备地址。该地址指派继续进行,直到不再存在连接到总线64的未指派从设备为止。由于每个从设备具有独有名称,将不存在以下情形:主设备52不知道哪个从设备与当前设备地址关联。在针对从设备的后续读取、写入和功能操作中,所指派的从地址1~14将用于识别从设备。
如果两个或更多从设备包含相同的芯片,这些设备可以被编程有不同位置信息,或具有用于对位置进行编码的额外端子。作为简单示例,单一输入端子可以提供左和右信道之间的信息。通过添加两个端子而不是一个,有可能通过将这些端子中的每个端子连接到GND、VDD或FLOAT(即,不连接或三态,Z)来指派最高9个不同位置(参见图11b~11e)。两个端子初始都被视为输入端子。在图11d中,如果输出端子浮置(即,开放输出端子),则可以基于输入端子来发出地址。输出浮置状况可以由图11e所示的电路来确定。通常,值X将由内部状态机来驱动,同时TEST(测试)是外部端子且Y是测试结果。该I/O电路可以用于SEL_IN和SEL_OUT端子以获得全部9个组合。在其他实施例中,针对FLOAT(Z)的测试可以被移除,且依然可以利用环形结构。可以包括高值的下拉电阻器,以减少功耗,同时没有针对输入端子TEST的连接,但是该高值的下拉电阻器在功耗不是问题的情况下可以是可选的。如果在输入X之后来自反相器的输出通常是活跃的,则可以备选地在值上增加2kΩ电阻器并省略100kΩ电阻器。图11d示出了示例管脚配置,图11d也与数字麦克风的传统系统兼容。图11b和11c所示的示例编码允许至少9个位置以及允许与当前传统系统的兼容性,同时无需任何编程和对物理布局的任何改变。如图11c所示编码的环形拓扑将第一设备连接到固定输入值,且所有后续设备将输入端子SEL_IN连接到前一设备的SEL_OUT端子。在启动期间,设备将通过以下方式来自动配置自身:递增第一值(0),直到将被编号N-1的最后一个设备(即,以环形拓扑连接的N个设备)。该拓扑具有可以获得多于9个位置的优点,但是具有以下缺点:如果单一设备发生故障,则枚举将失败。从而,与图11b中的配置相比,更容易出错且较不鲁棒,在本示例中,图11b中的配置使用了固定地址0~8(在其他实施例中,可以使用其他范围)。在两种情况下,在已完成了对内部位置的枚举之后,设备应当首先连接到总线64。该过程将比环形拓扑花费更长时间,因为每个设备通常进行等待,直到其接收到来自前一设备的信息为止,或已确认其就是环中的第一设备为止。
在实施例中,如果从设备54进入硬件错误状况且被重置,其从地址被设置为缺省地址零。如果从设备54丢失与主设备52的同步,其禁用其输出并尝试重新获取与主设备52的同步。从设备54应当保持其当前设备地址并使用上一次获得的命令分隔值来开始搜索(这在本文档中稍后描述)。在重新获得同步之后,从设备54可以通过将其设备状态设置为“10”来信号通知总线错误。然后主设备52将向该从设备54询问错误类型,且其可以在设备地址零、寄存器地址零处答复以SLAVE_SYNC_ERROR或“0xFF”。如果从设备54从地址零处接收到除读取操作之外的IO请求,在其完成读取序列之前,其应当回退以终止该过程。在实施例中,如果从设备54在操作期间丢失同步并且不能重新同步,则主设备52将通过使用PING操作在两个帧内知道该事件,然后改变主设备52的状态寄存器内的值并设置连接(ATTACHMENT)比特。
总而言之,从设备54在以下环境下对从地址的输出进行去激活:在上电重置之后,在从设备54未锁定到总线64上时,在从设备54已丢失与主设备52的同步时,在另一从设备赢得了仲裁时,以及在从设备54已完成输出其自身的名称ID时。
当主设备52开始功能REQUEST_ID且主设备52写入的设备地址等于从设备54时,从设备54重置其自身的寄存器并准备读取其ID。如果另一从设备在该事件发生之后锁定到总线64,则即使其设备地址与主设备地址匹配也不应当开始仲裁,因为其尚未接收到REQUEST_ID命令。从而,在上电重置之后或紧接在从设备将其自身连接到总线64之后,不应当允许其参与仲裁,除非其从主设备52已接收到该命令。
对硬重置(HARD RESET)功能(X3:X0=0001)的执行可以用于重置整个从设备,这类似于上电重置操作。
对软重置(SOFT RESET)功能(X3:X0=0010)的执行可以用于重置除了之前被编程的设备地址和同步引擎之外的所有功能。一般而言,除了从设备已经锁定到总线64上且已经被指派了地址之外,从设备的内部寄存器和功能将与上电重置事件之后一样。这意味着从设备将表现得好像其在上电重置事件之后一样,只是从设备已经连接到总线64且已经被指派了不同于零的地址。这可以用于比以下方式更快速地纠正内部或外部错误:重置从设备内的所有寄存器,让从设备锁定到总线64,然后在从设备可以被再次编程之前指派地址。
请求能力信息(REQUEST CAPABILITY INFORMATION)功能(X3:X0=0101)的执行可以用于获得与主设备52或从设备54的能力相关的信息。这可以用于自动设置端口。该功能通过从寄存器零和寄存器一读取值来工作,就与请求ID功能类似。返回的信息对应于正在被寻址的端口。当已读取了来自连接到端口的信道的所有信息时,可以代之以返回零,指示信息的结束。在该示例实施例中,端口是被连续定义的。
在图12中给出了用于获得主设备52或从设备54的能力信息的寄存器0x0000的示例。当从寄存器0x0000读取时,将给出从设备内的端口的能力。当读取端口的能力时,将返回以零终止的串。该串将包含与该端口相关的信息。端口的能力将表明其是什么方向(即,输入端口还是输出端口)、其具有多少个信道以及这些信道的数据格式是什么。在已读取了所有端口之后,下一个读取将返回值0x00。数据寄存器0x0000(以及0x0001)主要用于传输数据(在一些情况下,这可以是大量数据),例如,读取串、地址ID、校准数据等等。地址0x0000是数据寄存器的低字节,而地址0x0001是高字节。另一寄存器0x0C~0x0D可以用于传输地址且被称为地址寄存器。该地址是响应于来自主设备52的请求来传输的。
数据寄存器0x0000一般包括类型字段、信道信息字段和数据格式字段。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,可以将不同实现用于这些字段,这些字段可以按不同方式排序,或者可以存在使用的其他字段或使用的其他寄存器。
类型字段(B7)可以用于指示数据传输的方向,其中例如,0可以用于指示输入操作(即,从总线64读取数据)且1可以用于指示输出操作(即,向总线64输出或写入数据)。既支持输入也支持输出的信道可以连接到两个分离的端口,在本示例实施例中,这些端口之一被定义为输入端口,且这些端口中的另一个端口被定义为输出端口。在至少一些实施例中,连接到一个端口的所有信道共享相同的数据格式和相同的采样率。
信道信息(CHANNEL INFO)字段(B6:B4)可以用于定义与该端口相关联的信道的数目。每个端口可以与一个或多个信道相关联。信道信息字段将返回来自给定从设备的信道数目,且由端口(PORT)字段值来定义端口号。在实施例中,端口字段值可以用二进制减一来编码,在该情况下,“000”意味着一个信道或信道1,“101”意味着六个信道等等。通过写入信道信息字段,针对能力的下一个读取操作将在一般信息(GENERAL INFO)字段中得到与该信道相关的信息。在实施例中,针对每个端口使用的信道数目可以是八,且端口内每个信道的采样率是相同的。如果使用多个采样率,则可以将信道分组为具有相同采样率的更小的组。
数据格式(DATA FORMAT)字段(B3:B0)可以用于表明数据的格式。例如,可以使用各种数据类型,例如,二进制、比特流、串和浮点。针对统一总线通信协议的示例实施例,在图13中示出了各种数据格式及其在数据格式字段中的对应表示的示例。
再次参见图11a,对读取IRQ源(READ IRQ SOURCE)功能(X3:X0=0011)的执行可以用于返回从上一次执行该功能开始的第一个IRQ源。这可以返回与帧内出现总线错误的比特位置相关的信息、来自传感器的状态信息等等。如果IRQ事件发生,则如图14所示在数据寄存器0x0000和0x0001中报告错误代码。图14示出了统一总线通信协议的实施例的在执行功能“读取上一个错误(READ LASTERROR)”之后从数据寄存器读取的状态的示例。除非IRQ事件发生,否则将不报告错误代码。在图15中示出了可以在统一总线通信协议的至少一个实施例中使用的各种错误代码的示例。在其他实施例中,可以使用更多或更少的错误代码。
再次参见图11a,对请求相关校准数据(REQUEST RELATIVECALIBRATION DATA)功能(X3:X0=0110)的执行可以用于降低组件的生产差异。相对于组件的典型性能来测量校准系数。使用与端口规定的相同数据格式在数据字段中返回校准数据(除了作为用于比特流的16比特数字字之外)。在实施例中,可以将数字字编码为具有二补码表示(two complement notation)的有符号小数,且MSB等于-4.0(例如,0x80 00是-4.0000且0x7F FF是3.99988)。针对连接到当前选择端口的每个信道,将返回数字字。返回的第一个字将指示与全量程相比的相对测量精确度。作为示例,如果返回的值是2.00,则来自端口的值是在该组件的数据表中声明的典型值的两倍高。以与端口数据相同的数据格式来存储该值,除了比特流之外,在比特流中,可以将系数存储为16有符号数字字。在一些实施例中,可以将数字字存储为无符号整数,且值在0和25%之间,即,“0001000000000000”意味着测量精确度是大约全量程的3.125%。
对请求绝对校准数据(REQUEST ABSOLUTE CALIBRATIONDATA)功能(X3:X0=0111)的执行可以用于获得具有以SI为单位的输出量的绝对校准信息。这是使用插值来实现的。可以使用各种插值技术,例如,线性、多项式、样条函数和克莱恩肖(Clenshaw)等。该功能可以用于返回与测量的物理参数的偏移量和缩放相关的校准信息。返回的第一个字将指示(如上面针对请求相对校准数据功能描述的一样)与全量程相比的绝对精确度。在一些实施例中,可以将绝对和相对校准数据功能组合为单一命令,且被寻址的从设备将被请求响应以这些值中的任一值,或其自己可以告诉主设备什么类型的校准信息可用(即,相对还是绝对校准数据)。
对读取和递增地址(READ AND INCREMENT ADDRESS)功能(X3:X0=1000)的执行可以用于读取由从设备54内的寄存器“地址(ADDRESS)”所规定的16比特数据,并向Y字传输该寄存器的内容。之后,将从设备54内的地址寄存器的值递增一。
对写入和递增地址(WRITE AND INCREMENT ADDRESS)功能(X3:X0=1001)的执行可以用于获取Y字中的16比特数据并将该数据写入由从设备54内的寄存器“地址(ADDRESS)”所规定的地址。之后,将从设备54内的地址寄存器的值递增一。
如果从设备54包括处理器,则可以使用对在地址处执行功能(EXECUTE FUNCTION AT ADDRESS)功能(X3:X0=1010)的执行,在该情况下,该处理器将在下一帧的开始时执行去往具有由Y字定义的16比特地址的子程序的跳转操作。
如果从设备54包括处理器,则可以使用对在地址处间接执行功能(EXECUTE FUNCTION AT ADDRESS INDIRECT)功能(X3:X0=1011)的执行,在该情况下,该处理器将在下一帧的开始时执行去往具有在存储器单元内包含的地址的子程序的跳转。
对执行设备自检(PERFORM DEVICE SELF TEST)功能(X3:X0=0100)的执行可以用于执行设备自检,这可以用于例如出错和生产测试。自检的结果将导致错误代码或没有错误代码。对于错误代码,参见对“读取上一个错误”功能的描述。在自检的结束时将激活低级中断。当设备测试完成时将报告错误代码“设备自检”。
对设置增益(SET GAIN)功能(X3:X0=1100)的执行可以用于将信道增益设为所需值。
对设置延迟(SET DELAY)功能(X3:X0=1101)的执行可以用于针对端口或针对单体信道将以采样数为单位的延迟设为所需值。如果选择单体信道,则将必须指定信道号。这可以使用信道选择寄存器来进行。在一些实施例中,针对更精细的延迟精度,可以用小数采样的方式来指定延迟。
对设置功率(SET POWER)功能(X3:X0=1110)的执行可以用于使用比特B2:B0来设置端口或设备的功耗。在图17中示出了使用比特B2:B0的该功能的示例。在另一实施例中,可以使用不同数目的比特或不同的编码。
主设备52和从设备54设置通信信道,以能够支持通过总线64的数据传输。针对主设备52的输入可以来自于处理过的无线数据、来自处理器、或通过某种其他数字通信链路(例如,基于TDM或I2S的信道)。与主设备52或从设备54使用的每个端口相关联的是用于将业务定向至在总线64上发送的数据中的正确数据时隙(即,时隙)的寄存器。例如,主设备52和从设备54可以包括八个寄存器,其通过命令来设置端口活动(在备选实施例中,可以使用另一数目的寄存器)。可以将多个信道分配或归组在一个数据端口中,对其编程然后可以激活所选择的信道。这可以由主设备52在从设备54已锁定到(即,同步到)总线64之后完成。可以将来自或去往这些数据信道的数据编程为在帧中出现多于一次,或通过使用各种参数(例如,跳过(SKIP)和重复(REPEAT))在帧中具有不同间距,这将在本描述中稍后更详细描述。
在实施例中,四种类型的操作与这些寄存器相关联;这些操作是数据端口(Data port)、设置(Setup)、激活信道(Activate channel)和能力(Capability)。在备选实施例中,可以使用其他操作。此外,主设备52具有位于寄存器0x0C~0x0D的地址端口。从设备54可以可选地包括用于支持特殊功能的地址寄存器,例如,跳转到地址功能。及存储器是基于字节的,且来自地址零的16比特字读取操作将在最低有效字节(LSB)中返回寄存器地址零的内容,且在最高有效字节(MSB)中返回寄存器地址一的内容。在使用16比特模式时,将寄存器地址乘以二。
端口号在设备上的硬件中一般是固定的。与特定端口号相关联的音频或数据流是设备特定的。端口号的示例在本描述的端口定义节中给出。可以对主设备52的寄存器映射进行直接寻址(例如,通过I2C),同时可以由主设备52对从设备54的寄存器映射进行编程。信道信息用于使用统一总线通信协议来指派数据时隙(即,时隙)。信道指派可以改变,且取决于系统和使用情况。信道指派定义了来自设备的哪些端口被指派了总线64上的特定时隙。在实施例中,主设备52可以具有至少两个输入和两个输出端口,每个端口能够处理最高32比特字。在其他实施例中,不同数目的输入端口或输出端口和不同大小的数据可以用于主设备52。一般而言,从设备不具有针对端口的任何要求。在图16a中示出了针对这些操作的寄存器映射,在统一总线通信协议的至少一个实施例中,图16a是可以用于主设备52或从设备54的寄存器定义的示例。在图16b中示出了寄存器映射的另一示例。这些字段可以使用一个或多个寄存器的一个或多个比特来实现。在备选实施例中,不同的实现可以用于这些字段,这些字段可以按不同方式排序,或者可以存在使用的其它字段或使用的其它寄存器。可以将地址偏移量(OFFSET)加到主设备52的绝对寄存器地址上。然后可以使用偏移量+地址(OFFSET+ADDRESS)来计算所有真实地址。对于从设备,偏移量是0x00。这意味着从设备将使用主总线寄存器的绝对地址(0x00~0x07),使得主设备52将了解读取和写入什么地址。然而,主设备52本身可以在寄存器映射中使用不同于零的偏移量,因为其已经具有关于其自身的信息。然而,为了软件的简单性,寄存器系列可以相同。在其他实施例中,主设备52和从设备的寄存器序列可以不同。
数据端口(Data Port)功能可以由一个或两个8比特寄存器来表示。当执行从这些寄存器的读取操作时,在Y字中将返回8或16比特字。当执行针对这些寄存器的写入操作(8或16比特)时,将更新这些值。在上电重置操作之后,这些寄存器的缺省值是0x0000。数据字段(寄存器0x00,B7:0)表示16比特实体的较低8比特。在一个实施例中,在16比特数据传输期间,假定较高地址比特为零(即,为了简档,可以向偶数地址写入16比特数据)。数据字段(寄存器0x01,B15:8)表示16比特数据实体的较高8比特。
与设置端口(setup port)功能相关联的寄存器被指派了值,使得主设备52和从设备54能够使用统一总线通信协议在总线64上的发送数据中向所需数据时隙(即,时隙)传输信息。指派的细节的示例由针对图16a所示的各种字段的描述给出。
激活(ACTIVATE)字段(寄存器0x03,B7)可以用于定义数据流的功能以及如何对其进行控制。如果去激活输入流,则输出将为零。如果去激活输出流,则不向总线64写入任何内容。
准备(PREPARE)比特(寄存器0x03,B6)可以用于定义将要接通的与当前所选端口相关联的电路。当从该比特读取时,将返回端口的当前状态(逻辑一意味着端口准备好开始数据传输)。这可以用于确保所有电路准备好且在数据传输开始时没有小错误发生。
在备选实施例中(例如,图16b),功率等级(POWER LEVEL)字段(寄存器0x02,B6:B4)可以用于设置单体设备、端口和信道的功耗和操作模式,以优化系统的功耗。系统组件可以工作在若干模式下,该若干模式可以用于最小化功耗。例如,可以使用信道选择字段来选择单体信道。可以将未被选择的信道设置在低功率操作模式下,以节约功率。例如,在统一总线通信协议的一个使用中,所有信道可以处于低功率操作模式下直到已激活了准备比特为止。在激活了准备比特之后,在信道选择字段中选择的信道可以被置于正常操作模式下。通过读取准备比特的状态,有可能知道被选择的信道何时准备好接收或发送数据以及被选择的信道何时可以使用激活比特来激活(即,当所有选择的信道准备好时,准备比特将处于逻辑一电平),例如(但不限于)在某个与设备相关的初始上电延迟之后。
在至少一个实施例中,当不对设备施加功率时,总线64依然能够继续操作,即在不向从设备54或主设备52施加功率时,ESD结构不应当暂停总线64。
现在参见图17,其中示出了在示例实施例中的各种功耗等级的示例。在该示例中,功耗缩放由功能来定义且不是绝对的。换言之,图17所指示的精确功率等级可以针对不同从设备来变化。此外,对于由B6:B4=011至111来定义的功耗等级,端口或设备可以具有完全功能或者可以不具有完全功能。如果要设置整个设备的功耗,则可以使用用于广播的端口(15)。端口或设备可以仅支持一些功率等级。在示例实施例中,如果主设备52写入了从设备54所不支持的功率等级的值,则可以将其映射到支持的最接近的值。功率等级字段的缺省值是010(即,睡眠模式)。
再次参见图16a,IRQ23掩码字段(寄存器0x03,B5)用于启用或禁用通过总线64传输的来自从设备的中断,所述中断作为状态等级“10”和“11”,其通常将激活S0比特。当IRQ23掩码字段等于一时,当内部逻辑指示从状态等级时等级二或等级三(即,从设备54正在请求中断且被允许将该中断准入总线64)时,从设备54将发出高电平中断。当该比特等于零时,什么也不发生,且所指示的从状态等级将不影响S0比特。IRQ23掩码字段的缺省值是一(即,启用正常中断)。
IRQF掩码字段(寄存器0x03,B4)用于启用在从设备不支持主设备52请求该从设备执行的给定功能的情况下生成的中断。当IRQF掩码字段等于一时,从设备54在主设备52要求从设备54执行其不支持的功能操作时将被设为低电平中断。这将自动设置S0中断比特。如果从设备54已经处于中断待处理的状况下,则没什么新鲜事将发生。当IRQF掩码字段等于零时,什么也不发生。该IRQF掩码字段的缺省值是一。
端口字段(寄存器0x03,B3:B0)指示了正在寻址设备中的哪个端口。在本示例实施例中,端口号可以是0~15,其中,号15预留用于广播(即,所有端口监听来自主设备52的命令)。端口可以与从零开始高达八个信道的任何位置相连,且该映射是硬连线的。在备选实施例中,端口可以与多于八个信道相连。所有信道连接到特定端口,使得它们具有相同的数据格式。从设备54或主设备52可以具有多个端口。在广播命令期间,所有端口将监听对特定功能的改变,例如激活和堆组。为了使用端口,应当首先选择正要被激活的信道。然后如果设备在数据准备好之前花费了一些时间,则应当激活准备比特,应当选择恰当的帧和数据格式,且最终应当通过将激活字段设置为真来激活端口。
现在参见图18,其中示出了使用统一总线通信协议与两个从设备54a和54b通信的主设备52′的示例实施例,且从设备54a和54b具有被分配给各种信道的端口。在每个逻辑块中示出了用于各种音频和数据信道的端口号。这些端口号、信道和接口仅作为示例提供,且可以存在具有端口号、信道和接口的各种组合的各种其他实施例。
主设备52′包括复用和同步引擎100和端口102至110。复用和同步引擎100用于生成数据并根据正在使用的统一总线通信协议的帧格式将数据放在总线64上的特定时隙中。复用和同步引擎100还用于生成统一总线通信协议的同步信息。在字模式下执行总线64上的通信时使用字帧格式,且在比特流模式下执行总线64上的通信时使用比特流帧格式。在本描述中稍后将更详细地描述这两种格式。在本示例中,从端口104至110接收要发送的数据部分。
一般而言,可以使用处理器来实现复用和同步引擎。然而,由于对于复用和同步引擎存在大约2K个门数目,也可以将状态机或其他专用电路用于实现。例如,在典型的0.18μm工艺中,主设备的同步引擎可以实现在0.04mm2中。具有完全音频支持的完整主设备可以在某种程度上更大,但是可以小于0.1mm2。用于从设备的同步引擎在这两种情况下可以具有类似的尺寸。这是有利的,因为小的尺寸意味着更简单的设备驱动器和更好的硬件实现测试。在备选实施例中,主设备52′可以使用包含主设备52′的电子设备的主处理器来实现,例如,蜂窝电话或智能电话的基带处理器,在该情况下,可以由主设备52′内部生成控制信息,且端口104至110可以是可选的。
端口102是用于向连接到总线64的所有设备的端口发送信息的广播端口。其连接到所有其他端口的寄存器映射,且用于立刻控制所有端口。一般其不用于音频数据传输。端口104耦合到I2S接口,以在一个方向上(例如,担当发射机)根据I2S格式来传输信息。端口106耦合到另一I2S接口,以在相反方向上(例如,担当接收机)根据I2S格式来传输信息。端口108耦合到McBSP接口,以根据McBSP TDM格式来传输信息。端口110耦合到I2C接口以根据I2C格式来接收控制信息。
从设备54a包括复用和同步引擎120、端口122至126、模数转换器(ADC)128和数模转换器(DAC)130。在本示例中,ADC 128和DAC 130都具有两个信道。从设备54a的复用和同步引擎120用于与主设备52′同步,如下面更详细的描述。端口122是广播端口。在该示例中,端口地址15用于命令广播,即,向地址15发送的任何命令将影响连接到特定从设备的所有端口。此外,从地址15还预留用于广播,即针对该地址的写入操作将影响所有从设备。因此,针对从地址15和端口15的写入将影响系统中的所有设备和所有端口(例如,用于关机或同一时间对数据的同时激活)。端口124是定制端口(意味着其包括非标准接口,例如针对每个数据比特使用直接线的并行连接的I2C或I2S),该定制端口连接到ADC 128的两个信道。在备选实施例中,可以存在多于两个信道,且端口124可以连接到多于两个信道。ADC 128连接到生成数据的一个或多个设备,例如,麦克风、电流传感器、电压传感器、压力传感器、温度传感器等。可以存在两个相同类型设备连接到ADC 128的实施例,例如位于不同位置的两个麦克风。端口126连接到DAC 128的两个信道。在备选实施例中,可以存在多于两个信道,且端口126可以连接到多于两个信道。DAC 126连接到接收数据的一个或多个设备,例如(但不限于):输出扬声器、数字FM接收机、数字FM发射机、蓝牙接口、振动器、温度传感器、监视电池充电状态的传感器、加速度计、陀螺仪、GPS接收机或数字罗盘。
从设备54b包括复用和同步引擎140、端口142至152、ADC 154、DAC 156、和I/O 158和160。I/O 158和160可以例如分别是立体声ADC(表示为两个信道)和四信道DAC(表示为四个信道)。除了与端口124和ADC 128相比将更多信道用于端口146和ADC 154之外,端口142至148、ADC 154和DAC 156类似于端口122至126、ADC128和DAC 130。端口150被配置为根据I2S协议针对I/O 158发送或接收数据,I/O 158进而连接到I2S接口。端口152被配置为根据I2C协议针对I/O 160发送或接收数据,I/O 160进而连接到I2C接口。端口150连接到物理I2S接口并包含两个音频信道,左和右。这两个信道可以要么是输入,要么是输出,但不既是输入也是输出。端口150将捕捉来自多格式总线64的数据,并向I2S格式传输数据或在相反方向上反之。端口152连接到I2C接口且可以作为I2C主设备或I2C从设备。通过使用恰当的时序,I2C命令可以通过多格式总线64来传输并被写入I2C接口或从I2C接口读取(当作为从设备工作时),且I2C命令可以用于向多格式总线64请求寄存器数据,由此通过多格式总线64来隧道传输I2C活动,与所有其他正在进行的活动同时进行。
在一些情况下,从设备54b可以代之以实现为没有分帧能力(即,设置帧格式的能力)的额外主设备,且由此获得对其他设备的寄存器的直接访问权,用于访问这些寄存器而没有来自原始主设备52′的任何干预。注意:由于命令的编码(例如,在命令字段中将PING编码为000),可以将任何PING命令改为备选命令(在主要主设备52′允许这样做的情况下)。
在一些情况下,如果数据带宽在单线上不够或可以在主设备和从设备之间使用两个分离的总线,则可以使用多于一个数据线来传输数据。如果某些设备仅使用低带宽(例如,主要用于控制或慢的等时传输的设备)而系统的其他部分(例如,数字扬声器或麦克风)可以使用较高时钟频率,则这可以是有益的。通过将系统分为低带宽部分和高带宽部分,可以降低功耗且在某些情况下可以让配线更简单。
再次参见图16a,信道选择字段(寄存器0x02,B7:0)可以用于判定将来自给定端口的哪些信道选择用于在激活给定端口时使用。来自端口的信道数目是固定的,且信道选择字段用于选择哪些信道受到包括字开始、信道长度和跳过字段在内的各种参数的影响。被选择激活的信道具有在信道选择字段中设置为一的对应比特。在图19中示出了信道和信道选择字段之间的映射的示例,信道选择字段描述了端口的哪些信道用于通信。在备选实施例中,可以使用对信道的直接排序0至7,而不是如图19所示的排序7至0。为了简单性,使用降序,然而,在其他实施例中可以使用其他排序。来自未激活的信道的数据将不出现在总线64上。
在示例实施例中,由信道选择字段定义的所有信道将具有相同的采样频率且同时被采样,以简化实现。当将这些值转换为数字信号时,采样发生在模拟域中。类似地,如果对所有信道应用相同信号,即使该信息在总线上是顺序传输的,包含多个数模转换器的端口也应当在帧中具有相同的延迟,使得这些模拟信号将表现得一样。当针对每帧来放置采样一次时,采样事件被视为帧的开始。如果多于一个采样存在,它们可以等距间隔,且帧的开始作为第一采样。如果采样在每个帧上是不同的,例如,当使用小数流时,同步比特DS0至DS1可以用作采样基准,以跨多个帧对采样进行同步。每个端口将具有其子集的信道选择字段,且由寄存器0x02中的端口字段来选择活跃的端口。
再次参见图16a,开始(START)字段(寄存器0x04;B7:B0)可以用于定义帧中的第一时隙作为时间基准,在该点上,使用命令字将端口定义为发送或接收数据。在实施例中,该值以无符号二进制形式以半半字节(semi-nibble)为单位来给出(半半字节是2个比特)。作为示例,开始字段的按半半字节形式的值“00001000”指示了数据在命令字结束之后的16比特开始。
当前堆组(CURRENT BANK)字段(寄存器0x0F;B4)(参见图29a)可以用于选择哪个寄存器用于下一个读取、写入或功能操作。在具有PING操作的每个帧期间,将输出活跃存储器堆组。然而,在至少一个实施例中,连接到总线64的设备将在两个帧的延迟之后首先改变其寄存器堆组,以确保防止单比特错误。这允许在两个操作模式之间的无缝改变,而不输出或输入小错误。当前堆组比特由主设备52用来选择活跃寄存器堆组。
应当注意到:传统上,在这些不同数据模式之间的切换是通过减少音量(volume)、改变寄存器的设置、然后增加音量来进行的。有利地,由于寄存器可以切换且在PING操作中示出了活跃寄存器,因此统一总线通信协议的方面是在数据之间立刻切换的能力;例如,有可能改变音频场景而在音频输出中没有咔哒声。
在图16b的备选实施例中,堆组模式(BANK MODE)字段(寄存器0x05,B7)可以用于确定堆组选择比特的解释。当堆组模式字段等于零时,堆组选择比特在I/O操作期间替换最高有效地址比特。此外,(如主设备52在I/O操作期间给出的)I/O地址的最高有效地址比特用于选择当前堆组。当堆组模式字段等于一时,堆组选择比特将选择下一个I/O操作影响哪个堆组。在图20中示出了各种可能性,图20示出了在读取或写入操作期间根据示例实施例中的堆组模式字段和堆组选择字段来选择的堆组和地址的示例。
再次参见图16b的备选实施例,堆组选择字段(寄存器0x05,B6)可以用于选择哪个寄存器用于下一个读取或写入操作。在具有PING操作的每个帧期间,将输出活跃存储器堆组。然而,在实施例中,连接到总线64的设备可以在特定数目(例如,两个)帧的延迟之后首先改变堆组模式字段,以帮助防止单比特错误。在该情况下,当前堆组比特由主设备52用来选择活跃寄存器堆组。堆组模式字段确定堆组选择字段的解释,如图20所示。
再次参见图16a,长度字段(寄存器0x06,B5:B0)可以用于定义每个信道的数据大小,以半半字节为单位(即,以2比特为单位)。在示例实施例中,长度字段的值以二进制减一的方式来编码,且以两个比特为单位来给出(例如,“01011”=0x0B被解释为11+1=12乘以2个比特,即24比特数据宽度)。还定义了最大信道宽度,在本示例中是128比特。如果将多于最大信道宽度用于描述量(例如,IEEE四倍精度(quad precision)复数),这可以通过将端口中的两个信道合并来实现。依然有可能使用子组(SUBGROUP)字段在合并的信道之间添加间距。对于传输比特流数据的端口,忽略长度字段,因为信道大小对于比特流数据来说是1比特。在比特流模式下,信道的长度为一。
跳过(SKIP)字段(寄存器0x06,B7:B6)可以用于定义在重复字段活跃时跳过的时隙或数据时隙的数目。在本示例中,跳过字段中的值可以用二进制方式来编码(例如,“00000”意味着如果端口被重复则不跳过,且“00001”意味着来自相同端口的下一数据块在距前一数据块的16比特之后到来)。这可以用于将来自多个端口的数据混合在子帧中,如在本描述下面将要进一步描述的。使用跳过字段的示例在图21中示出,在图21中,在子帧中(即,在两个命令字之间)将来自单一端口的数据重复多于一次,因为使用跳过值为1且正在使用字模式。每个端口将具有其自己的跳过字段,且由寄存器0x02中的端口字段来选择活跃的端口。
再次参见图16a,同步字段(寄存器0x05,B7:B6)用于在等时、异步和多帧传输之间选择。在图22a中示出了根据示例实施例取决于给定帧中使用等时、异步和多帧传输来设置的各种字段值(图22c示出了可以在一些情况下使用的备选实施例)。
再次参见图16a,字段PCLKD(寄存器0x07,B7:B4)设置总线时钟和从设备中端口的内部采样时钟之间的比率。不一定针对小数选项为分频进行编码(例如,在两个沿上的时钟,除以2.5、6.5&12.5),除非提供对26.00MHz的支持。为了节约空间,可以用图22b所示的压缩方式对该字段编码。在至少一些实施例中,每个端口可以具有其自己的PCLKD字段,且由寄存器0x02中的端口字段来选择活跃的端口。
现在参见图22a,配置1是缺省配置,且配置1将导致等时数据传输,即在每个子帧期间数据是有效的。配置2通过在来自端口的第一信道的数据前面添加两个状态比特处理了异步传输。第一状态比特指示了后续的端口数据是否有效(在异步数据传输中,未准备好的数据被视为无效且被丢弃),且第二状态比特指示接收设备是否能够接受他们。在备选实施例中,在数据之前的一个比特可以用于指示发送设备具有新数据且接收设备必须接受他们。备选地,在数据之前的一个比特可以用于指示从设备准备好接受数据且该数据应当已经从主设备或另一发送设备可获得。配置2在带宽可用于这些比特时对于多个异步信道是有用的。
配置3和4用于小数同步,例如,用于48kHz信道中以44.1kHz采样的数据。在该情况下,发送设备可以将来自单一端口的数据的发送扩展到若干帧中。在该情况下,DS0和DS1比特每三个帧有效,且用于重置内部小数相位加法器(小数计数器),该内部小数相位加法器用于确定当这些比特不活跃时采样是否有效。该发送的开始是通过将DS0或DS1比特设置为逻辑一来信号通知的。位于主设备52或从设备54中的发射机可以通过激活DS0和DS1比特来控制数据流。
再次参见图16a,子组字段(寄存器0x05,B5:B3)可以用于将来自给定端口的信道分组为若干子组,以降低针对子组中的信道提供数据的源的时延。当发送的信道的数目等于子组字段中的值时,来自这些信道的数据发送将停止一定数目的时隙,该数目等于跳过字段中指定的半字节的数目,然后重复。如果子组字段等于“111”,则子组字段将被忽略,且来自端口中的信道的数据将被在一个组中发送(例如,将没有子组)。缺省值是“111”。
图23示出了在以下情况下的帧设置(即,帧格式):使用多个信道,且在来自相同端口的信道之间进行划分,以实现字模式下较低时延,且子组字段用于将来自端口的信道的数据分为若干子组。子组字段由B3和B4:B5分别规定的两个乘数构成。在跳过发生之前发送的信道数目等于由字段B3和B4:B5定义的乘积。如可以从图23中示例所见的,子组字段规定了将多少个信道一起分在子组中,且这可以针对端口的所有活跃信道来进行。因此,在一个示例中,如果图23的端口具有提供音频0、音频1、音频2和音频3的四个信道,则音频0和音频1的信道形成第一子组且音频2和音频3的信道形成第二子组。应当注意到:图23仅示出了单一子帧的结构。该结构将被多重复两次以完成该帧。因此,子帧在字模式下被定义为帧中包括控制字并且后接在下一个控制字之前出现的数据的部分。
再次参见图16a,重复字段(寄存器0x05,B2:B0)可以用于确定在子帧内将来自端口的数据重复多少次。重复字段的缺省值是“000”。在图24中示出了在字模式下使用重复字段将来自多个数据信道的数据重复若干次时的帧设置的示例。在实施例中,重复字段由两个乘数B0和B1:B2构成。在帧期间发送由信道选择字段定义的信道的次数等于由重复字段的字段B0和B1:B2定义的乘积。因此,在图24的示例中,使用来自端口的2个数据信道(音频0和音频1)的数据。开始字段以半字节为单位设为8,长度字段以半字节为单位设为4,重复字段以半字节为单位设为“001”,信道选择字段是“00000011”,子组字段是“000”(以半字节为单位)且命令分隔字段以半字节为单位是112/4=28(请记住将以半字节为单位的所有值乘以2来得到具有以10为底的格式的值)。在图24的示例中可以看到:来自信道音频0和音频1的数据被一起分组在子组中,且被重复三次,且在子组之间没有间隙,因为跳过字段具有值0。应当注意:在比特112~127的来自数据信道音频1的数据之后,从比特0至比特127的结构将多重复两次以完成一个帧。因此,图24示出了单一子帧,且使用三个子帧来完成一个帧。
如果在传输所有数据字之前完成了子帧,可以终止发送,在该情况下,即使已发生了编程错误,主设备52或从设备54不被允许写入S、X或Y字。从而,可以用任何大于“010”的重复值来获得图24所示的相同配置,因为在本示例中在三个数据对的结束之后没有其他数据跟随。每个端口将具有其自己的重复字段,且由寄存器0x02中的端口字段来选择活跃的端口。
在比特流模式下,以一次一个比特的方式来传输数据,且来自不同数据信道的数据被复用,而不是一次在一个数据信道上传输来自每个数据信道的所有数据。为了实现比特流模式,某些字段的定义在本示例实施例中改变。例如,当传输来自端口的比特流数据信道的数据时,当前不使用以下字段:长度、跳过和同步。修改对开始、重复和子组字段的解释,以适合复用比特流的性质。所有其他字段未改变。
再次参见图16a,在比特流模式下,可以将开始字段修改为比特流模式下的开始(START IN BITSTREAM MODE)字段(寄存器0x04,B7:B0),其被分为两个字段(HSTART和VSTART),且用于传输比特流数据的端口或用于传输被转换为比特流数据的数字字数据的端口(如在本描述中稍后将描述的)。HSTART字段的值(寄存器0x04,B7:B4)给出了单一子帧内来自端口的信道数据的开始,且可以用二进制方式编码。VSTART字段中的值(寄存器0x04,B3:B0)给出了帧中垂直方向上来自端口的信道数据的开始。
在比特流模式下,可以将子组和重复字段修改为比特流模式下的VSPACING和HSPACING字段(寄存器0x05,B5:B0),其被分为两个字段。HSPACING字段(B2:B0)给出了在单一子帧内比特流重复之间的距离。因为在比特流模式下子帧内的控制字被分为单体比特,所以子帧是根据三个控制字S、X和Y之一的比特(例如,S15、X15、Y15)和来自控制字S、X和Y之一的后续比特的开始(例如,S14、X14、Y14)来定义的间隔。VSPACING字段(B5:B3)中的值给出了在垂直方向上比特流的重复之间的距离。
可以使用图26a至28d的示例来理解在比特流模式下使用的结构。
现在参见图26a和26b,其中示出了可以通过使用比特流模式下的HSTART和VSTART字段的不同值来实现的不同帧格式的示例。在两种情况下,信道选择字段都被设为00000011(即,选择来自端口的头两个比特流数据信道)。在左上角开始发送比特,沿着行移动到行末,然后移动到下一行的最左侧比特并继续,直到该行的结束为止且依此类推,直到发送了帧中的所有数据。应当注意到:比特流帧格式定义了用于帧中各种比特的时隙。比特实际上由具有该比特的数据的对应设备来发送。例如,在图26a中,S15比特由主设备52发送,且来自比特流数据信道M0的第一比特由具有该信道的从设备发送。
在图26a中,值0001在HSTART字段中,值0000在VSTART字段中,值000在VSPACING字段中(其意味着重复率将是一;即没有间隙),且值111在HSPACING字段中(其意味着我们将仅具有一个信道)(这些值根据图27来编码)。如可以看到的,帧开始于S字的S15比特,然后来自端口的第一数据信道M0的第一比特和来自端口的第二数据信道M1的第一比特。发送来自S字的下一个比特S14,之后是来自端口的第一数据信道M0的第二比特和来自端口的第二数据信道M2的第二比特。该模式继续,直到发送了来自帧的S字的所有比特,此时以与S字的比特类似的方式来发送来自帧的X字的比特,后接数据信道M0和M1的比特。该模式继续,直到发送了来自帧的X字的所有比特,此时以类似的方式发送来自帧的Y字的比特,后接数据信道M0和M1的比特。此时,在总线64上发送了全帧。
在图26b中,值0001在HSTART字段中,值0000在VSTART字段中,值010=2x1在HSPACING字段中且值000在VSPACING字段中(这些值根据图27所示的表格来导出)。如可以看到的,帧开始于S字的S15比特,然后来自端口的第一数据信道M0的第一比特和来自端口的第二数据信道M1的第一比特。然而,此时重复来自端口的数据信道的数据。因此,由于HSPACING字段具有值2,发送来自数据信道M0的第二比特,后接来自数据信道M1的第二比特。这可以被认为是在HSPACING列之后重复来自端口的数据信道的数据,直到已达到最大数目的比特流为止,然后发送来自命令字的下一个比特。然后发送来自S字的下一个比特S14,之后分别是来自数据信道M0和M1的第三比特,之后再次是端口的数据信道M0和M1。该模式继续,直到发送了来自帧的S字的所有比特,此时以与S字的比特类似的方式来发送来自帧的X字的比特,后接发出两次的数据信道M0和M1的比特。该模式继续,直到发送了来自帧的X字的所有比特,此时以类似的方式发送来自帧的Y字的比特,后接发出两次的数据信道M0和M1的比特。在一些实施例中,可以用不同方式对VSPACING和HSPACING进行编码,例如,针对每个字段使用4个比特的直接二进制编码且不使用对信息的压缩。
对比特流帧中用作命令信道的比特流信道进行写入一般是非法的,因为这将使总线64崩溃。从而,在至少一个实施例中,如果向HSTART字段写入值0000,则在总线64上不应当允许数据输出。
在至少一个实施例中,在比特流模式下,HSAPCING和VSPACING字段中的LSB值如图27的第一个表中所示定义,同时HSPACING和VSPACING字段中的MSB和LSB+1值如图27的第二个表中所示定义。如果在HSPACING和VSPACING字段之一中所有比特被设置为1,则将忽略该字段。否则,将以作为LSB定义的乘数和MSB与LSB+1定义的乘数的乘积的距离来重复来自比特流数据信道的比特流。如果HSPACING字段的值是111,则这意味着来自端口的比特流数据信道的比特流将在水平方向上不重复。如果VSPACING字段的值是111,则这意味着来自端口的比特流数据信道的比特流将在垂直方向上没有中断的情况下发送。图28d中示出了这种示例。在另一实施例中,当在比特流模式下传输TDM字时,VSPACING字段可以用于指示将多少个比特流用于携带端口信息(范围1~8中的值,其中,该值以无符号二进制加一的方式编码)且HSPACING字段可以用于指示这些比特流中的第一个。
应当注意到:如将从以下示例中看到的,HSTART、VSTART、HSPACING和VSPACING字段是针对设备的每个端口包括的数据信道来指定的。
现在参见图28a,其中示出了使用统一总线通信协议的具有电流(I)和电压(V)感测的立体声系统170的示例实施例。立体声系统170包括基带处理器172、具有第一扬声器176的第一放大单元174、具有第二扬声器180的第二放大单元178和总线182。第一放大单元174和扬声器176可以被视为是立体声系统170的左音频信道,同时第二放大单元178和扬声器180可以被视为是立体声系统170的右音频信道。总线182将基带处理器172与第一和第二放大器单元174和178耦合。总线182上的发送符合统一总线通信协议。
基带处理器172包括处理单元184、复用和同步引擎186和存储器188。处理单元184可以是处理器(例如,DSP)或专用硬件电路。复用和同步引擎186被配置为使得基带处理器172担当主设备,使得其可以根据统一总线通信协议通过总线182与第一和第二放大单元174和178通信并对其操作进行控制。
第一放大单元174包括控制单元190、复用和同步引擎192、Δ∑转换器194、放大器196、电流传感器198和电压传感器200。复用和同步引擎192被配置为使得第一放大单元174担当从设备,且可以根据统一总线通信协议通过总线182与基带处理器172通信。控制单元190可以由处理器或专用硬件以及控制第一放大单元174的操作的固件来实现。在操作中,从基带处理器172向第一放大单元174发送音频数据已进行放大。音频数据经由转换器194转换为模拟格式,通过放大器196放大并通过扬声器176输出。与放大单元174的操作相关的电流和电压信息分别由电流传感器198和电压传感器200测量,并向基带处理器172发送,以监视放大单元174的工作状况。如本领域技术人员所理解的,如果监视指示了放大单元174处于危险状态下,例如,过热、过电流或电压不足,基带处理器172可以向放大单元174发送控制指令,以处理该危险情形。
第二放大单元178包括控制单元202、复用和同步引擎204、Δ∑转换器206、放大器208、电流传感器210和电压传感器212。复用和同步引擎204被配置为使得第二放大单元178担当从设备,且可以根据统一总线通信协议通过总线182与基带处理器172通信。控制单元202可以用与控制单元190类似的方式实现。在操作中,第二放大单元178以与第一音频放大单元174类似的方式工作。
应当注意到:复用和同步引擎块192和204可以实现为硬件块。此外,在备选实施例中,控制单元190和202可以与复用和同步引擎192和204分别集成。
现在参见图28b,其中示出了可以用于图28a的立体声系统的比特流帧格式的示例。在该比特流帧格式中,仅将水平维度用于复用比特流数据信道。在该情况下,存在使用的八个帧信道。将第一帧信道用作发送控制字的控制比特的控制信道。将第二帧信道用于发送左立体声信道的音频数据。将第三帧信道用于发送左立体声信道的电压信息。将第四帧信道用于发送左立体声信道的电流信息。第五帧信道不用于发送数据。这样做的原因是为了支持与当前系统兼容的工作频率,可以使用8比特流而不是7比特流,由此留下一个信道为空。将第六帧信道用于发送右立体声信道的音频数据。将第七帧信道用于发送右立体声信道的电压信息。将第八帧信道用于发送右立体声信道的电流信息。以一次发送一个比特的方式来发送每个帧信道的数据,且将每个帧信道的数据与其他帧信道进行时间复用。该比特流帧格式具有长度48比特和宽度8比特,总共是384比特。在示例中,时钟速率是48kHz x 64x 7=7x 3.072Mbit,从而fclock=12.288MHz(通过使用全部两个时钟沿并向上取整到最接近的公共时钟频率来得到)。为了确定使用多少带宽,可以将输出采样率与过采样率和比特流帧信道的数目相乘。例如,假定48kHz输出采样率,过采样率等于64且有7个信道,则这将等于21.504MHz。然而,为了使其与12.288MHz系统兼容,可以使用一个空白信道且使用24.576MHz时钟系统。如果在时钟的全部两个沿上传输数据,则使用12.288MHz时钟。
然而,未将用于音频比特流信道L和R的全音频带宽用于电流和电压感测。这是因为扬声器176和180的机械共振远低于全音频带宽。此外,热时间常数远大于音频数据中的改变。因此,可以将较少的带宽用于电流和电压感测/控制数据,因为阻抗建模不使用与音频数据一样多的带宽。
在图28a的示例系统中,带宽使用可以通过在给定帧信道内进行复用来增强。除了音频应用之外,该概念可以用于其他类型的应用,在这些应用中,类似于该当前示例,在各种数据的带宽中存在差异。在公共帧信道中进行复用时通过在多个数据信道之间共享比特流帧信道来实现的,这导致了带宽使用的降低。换言之,将多于一个数据信道指派给单一帧信道有效地导致了过采样以及带宽使用中的改变。这可以通过使用若干计数器和缓冲区来容易实现。
现在返回图28c,其中示出了可以用于图28a的立体声系统的比特流帧格式的另一示例,其中,若干数据信道被复用到公共帧信道中(例如,第三帧信道)。这允许使用较低时钟频率通过总线182来传输相同数据,该较低时钟频率在本示例中是图28b中使用的帧格式的时钟频率的一半。
在图28c的示例中,存在所使用的四个帧信道。将第一帧信道用作发送控制字的控制比特的控制信道。将第二帧信道用于发送左立体声信道的音频数据。将第三帧信道用于发送左和右立体声信道的电压和电流信息。将第四帧信道用于发送右立体声信道的音频数据。再一次地,用一次一个比特的方式发送每个帧信道的数据,且将每个帧信道的数据与其他帧信道进行时间复用。该比特流帧格式具有长度(或行数)48个比特和宽度4个比特,总共192个比特。如果帧信道中的数据被跨若干帧来划分(这可以使用DS0~DS1比特来进行),则行数可以长于48。在本示例中,时钟速率是48kHz x 64x(3+1)=4x3.072Mbaud=6.144MHz。输出采样率是48kHz,过采样率是64倍高(即,比特流针对每个输出采样占用64个比特),且存在三个比特流帧信道加上一个控制帧信道。因此在两个数据沿上都采样的情况下,这样占用的总带宽是48k/s x 64比特x 4=12.288Mbaud(Mbit/s=Mbaud)或6.144MHz。
第三帧信道是复用帧信道的示例,其中,在垂直方向上将针对来自左音频信道的电压信息的来自数据信道的数据、针对来自左音频信道的电流信息的来自数据信道的数据、针对来自右音频信道的电压信息的来自数据信道的数据、针对来自右音频信道的电流信息的来自数据信道的数据一起复用在公共帧信道中。
该带宽控制的概念还可以通过向比特流帧格式添加附加帧信道以重复来自数据信道的数据,而扩展到控制控制信道的带宽。换言之,通过在比特流帧格式的水平方向上重复来自比特流数据信道的数据,可以减少向控制帧信道分配的带宽,且因此用于发送控制字的带宽更小。在图28d中示出了这样的示例,在图28d中,控制帧信道现在是6个比特流帧信道之一,带宽1/6=16.7%,与图28c中的示例相比,其中,控制帧信道是4个比特流帧信道之一,带宽1/4=25%。在该情况下,时钟速率是48kHz x(200/3)x(2+1)=9.6Mbit=4.8MHz(200/3是过采样比,且2+1表示用于音频数据的2个信道和用于其他数据的1个信道)。
现在参见图28d,其中示出了在示例实施例中在比特流模式下可以通过设置HSTART、VSTART、HSPACING和VSPACING的值来实现的比特流帧格式的示例。将放大单元174指定为“从D1”且将放大单元178指定为从D2。从D1提供了用于左音频信道的第一端口,且具有以下比特流字段设置:HSTART=0001(即,在命令信道之后的第一比特流信道)、VSTART=0000(即,在帧的顶部开始)、HSPACING=001=1x3(即,在水平方向上在三个比特之后重复)、和VSPACING=000(即,在垂直方向上在下一个比特处立刻重复)。从D1提供了用于IV感测的第二端口,且具有以下比特流字段设置:HSTART=0011(即,在命令信道之后的第三比特流信道)、VSTART=0000(即,从帧的顶部开始)、HSPACING=111(即,在水平方向上不重复)、和VSPACING=100(即,在垂直方向上在4个比特之后重复来自端口的数据)。从D2提供了用于右音频信道的第一端口,且具有以下比特流字段设置:HSTART=0010(即,在命令信道之后的第二比特流信道)、VSTART=0000(即,在帧的顶部开始)、HSPACING=001=1x3(即,在水平方向上在三个比特之后重复)、和VSPACING=000(即,在垂直方向上不存在间隙)。从D2还提供了用于IV感测的第二端口,且具有以下比特流字段设置:HSTART=0011(即,在命令信道之后的第三比特流信道)、VSTART=0010(即,在第三比特流信道中的帧的顶部之下两个比特开始)、HSPACING=111(即,在水平方向上不重复)、和VSPACING=100=4x1(即,在垂直方向上在4个跳过比特之后重复)。
可以看到,通过改变HSPACING和VSPACING的参数,向等时比特流帧信道分配的带宽比例可以相比于向控制信道分配的带宽比例发生改变。如果在水平方向上经常重复信道(即,低HSPACING值),则与控制信道相比,向等时信道分配更多的带宽。如果VSPACING大,则与控制信道相比,在等时信道中分配较少带宽。示例示出了:通过使用在4.8MHz上工作的双沿采样数据线,可以依然传输以因子200/3(接近64)来过采样的2个音频比特流信道,且依然还携带适合反馈应用的4个数据信道。尝试对SLIMbus进行做同样的事情将要求系统时钟24.576MHz。在本示例中,在具有全立体声音频、设备控制和IV感测的情况下,总线时钟频率仅为4.8MHz。因此,通过使用根据统一总线通信协议的至少一个实施例的比特流帧信道的带宽控制的能行,获得了可观的功率节约量。
因此,通过执行将来自不同比特流数据信道的数据合并到公共帧信道和重复将比特流数据信道分配给不同帧信道中的至少一项,可以根据具体应用来改变各种数据信道和控制帧信道的带宽,以更有效地使用带宽且因此更有效地进行数据发送。
在至少一些实施例中,有可能在比特流模式下传输TDM字。在该情况下,子组字段具有不同的解释。将在单一列(即,单一帧信道)中传输TDM字,就好像其他列(即,帧信道)不存在一样。再次参见图16a,在比特流模式下,则修改子组字段以变为比特流模式下传输的TDM字(TDM WORDS TRANSFERRED in bitstream mode)字段(寄存器0x05,B5:B3)。然后子组参数之前的定义是不可能的,且所有端口将传输来自所有选择的信道的所有数据,而没有在这些数据信道之间的中断。比特流模式下传输的TDM字字段指示了比特流帧格式中哪些比特流帧信道用于传输字数据。在实施例中,比特流帧信道0~7可以用于传输时分复用(TDM)数据。
如将要解释的,TDM数据是可以在比特流模式下支持的数字字。比特流帧信道0用作控制信道,且被映射到无数据输出,因为在本示例实施例中,其仅用于发送来自S字、X字或Y字的比特。在比特流模式下,DS0比特可以用于指示数据发送的开始,以支持单一比特流帧信道中的海量数据信道或支持与比特流帧长度不兼容的数据长度,在本示例实施例中,比特流帧长度是48比特,因为在控制信道中没有间隙的情况下在每个帧中发送S字、X字和Y字且这些字各是16个比特。例如,当四个数据信道个具有16个比特时,这等于总共64个比特,在比特流模式下必须在一个帧信道中发送,这可以使用跨若干帧的数据同步来进行。在其他实施例中,即使在比特流模式下,在控制字之间也可以存在间距,以允许对比特流信道中放置的TDM字的更好同步。
现在参见图29a,其示出了可以用于主设备52的寄存器定义的示例。在图29b中示出了备选实施例,但是以下描述将主要关注与图29a相关的实施例。一般将寄存器分为三组,其提供了以下功能:地址端口、命令端口和设置端口。寄存器提供了针对现在将描述的多个字段的值。应当注意到:在备选实施例中,可以定义其他寄存器且可以使用寄存器的一个或多个比特来实现这些字段。在备选实施例中,可以将不同实现用于这些字段,这些字段可以按不同方式排序,或者可以存在使用的其他字段或使用的其他寄存器。
在实施例中,命令分隔字段(寄存器0x08;B7:B0)是8比特长,且表示无符号整数。命令分隔寄存器的功能将取决于图25a所示的帧格式类型的值。图25c示出了取决于在统一总线通信协议的实施例中使用的帧类型的命令分隔字段的定义的备选实施例的示例。图25c与图29b结合使用。
如果帧类型被设为字模式,则使用字帧格式且命令分隔距离被以半字节(即,4个比特)为单位来指定,且给出两个命令字之间的距离,不包括命令字本身。分离值可以是零,在该情况下,仅向总线64传输命令信息(这在图40中示出)。缺省值可以设置为等价于缺省帧长度48,者实现了用于编程寄存器的带宽,由此允许总线64快速设置且允许连接的从设备快速获得与主设备54的同步。
如果帧类型设为比特流模式,则使用比特流帧格式且在数据流之间对控制比特进行交织。在该模式下,命令分隔寄存器将给出命令比特之间的数据比特数目。例如,命令分隔字段中的值3意味着将每4个比特就遇到命令比特(即,命令比特将被可以作为数据比特或空白时隙的3个比特所分隔)。在比特流模式下S、X和Y字在比特流数据之间间隔,导致比特流数据的低时延。如果使用比特流模式,在至少一个实施例中,在主设备52开始数据通信并在所有数据时隙中发出零之前,可以首先向所有从设备指派地址,直到从设备已获得与主设备52的同步为止,以减少所有从设备的锁定时间。如果从设备52脱离与主设备52的锁定,则从设备54可以尝试用命令分隔字段的之前值和相同帧类型来重新获得同步,以避免更长的完全的同步搜索。当控制帧类型的内部寄存在被写入时,在下一个帧的开始时将更新该内部寄存器。在实施例中,命令分隔字段的缺省值在上电时可以是0x1C,这等价于缺省帧长度384比特。有可能在比特流模式下在命令字之间添加间距。为了限制搜索时间以及为了简化的目的,在一些实施例中,如图25b所示使用有限数目的子帧长度。
在至少一些实施例中,在从设备内不使用该寄存器,除非从设备能够同时改变向控制信道分配的带宽的百分比和帧格式而不中断数据传输。在其他情况下,从设备的内部同步引擎可以具有必要的信息。在一些实施例中,可以针对所有端口来共享命令分隔字段,但是可以存在针对每个堆组寄存器的命令分割字段,且可以通过堆组比特来选择活跃字段。在一些实施例中,可以由帧结构(FRAME STRUCTURE)字段来替换包括帧类型比特的命令分隔字段。这两种结构都包含与命令字之间的分隔有关的信息,且如果在字模式下,使用多个比特流来携带数据。
采样率比(SAMPLE RATE RATIO)字段(例如,寄存器9)可以用于指示具有TDM输出的∑Δ转换器的过采样率。该寄存器可以用于以简单方式来设置抽取和插值滤波器,且用于支持多帧同步。该信息经常可以根据命令分隔值(其可以被称为帧结构值-参见图69a)和重复参数来推断出,或根据小数(FRACTIONAL)寄存器来推断出。然而,存在以下情况:直接对总线时钟频率和针对数据信道定义的输出采样频率之间的比率进行直接编程是方便的(例如,在当前堆组改变期间,且如果使用重复将参数重复多于六次)。这是通过使用采样率比寄存器来实现的。此外,在一些实施例中,该寄存器可以包括为多帧同步预留的字段。在该示例实施例中,采样率比字段包括子字段:多帧(MULTI FRAME)、第一级(FIRST STAGE)、可选级(OPTIONALSTAGE)、第二级(SECOND STATE)和第三级(THIRD STAGE)。
多帧字段(寄存器0x09;B7)可以用于选择通过DS0和DS1比特的同步作为对子帧同步的替代。端口信息一般是针对S、X&Y字的最后一个比特来定义的。然而,在一些高效数据传输的情况下,使用除子帧的开始之外的不同时序基准,例如,每隔一个子帧的开始。这可以通过设置多帧比特为真并选择DS0比特或DS1比特作为同步源来实现(这是通过将同步设为等于“10”或“11”来进行的)。如果多帧比特为伪或该寄存器丢失,当将DS0和DS1比特用于同步时,仅支持小数传输。
第一级字段(寄存器0x09,B6:B5)可以用于定义多级同步采样率转换器的第一级的采样率转换比。在图29c中示出了可以如何对第一级字段进行编码的示例。采样率转换比是通过如图29c~29e所示的字段的乘积来发现的。
可选级字段(寄存器0x09,B4:B3)可以用于定义多级同步采样率转换器的可选级的采样率转换比。如果需要,该级可以用于直接支持26.00MHz频率。为了节约空间,在图29d中示出了可以如何对可选级字段进行编码的示例。
第二级字段(寄存器0x09,B2)可以用于定义多级同步采样率转换器的第二或第三级的采样率转换比。该部分可以用与部分一和三相反的方式来实现,即,如果整体动作是抽取,则第二级可以执行插值,且如果整体动作是插值,则第二级可以按给定因子来执行抽取。在某些系统配置下这实现了更好的性能。为了节约空间,在图29e中示出了可以如何对第二级字段进行编码的示例。
第三级字段(寄存器0x09,B1:B0)可以用于定义多级同步采样率转换器的最后一级的采样率转换比。为了节约空间,在图29f中示出了可以如何对第三级字段进行编码的示例。图29g和29h示出了完整的多格式抽取器和插值器系统。具体地,图29g示出了多格式抽取器系统的示例,其适用于多采样率比和与各种时钟频率的兼容性。可以在每个采样率转换部分之前或之后加以缩放因子,使得整体增益恒定,而不管所选采样率比如何。图29h示出了多格式插值器系统的示例,其适用于多采样率比和与各种时钟频率的兼容性。可以在每个采样率转换部分之前或之后加以缩放因子,使得整体增益恒定,而不管所选采样率比如何。有可能改变各部分的顺序(如果这样做有益),或者有可能在部分之间添加缩放,以确保采样率转换器的总增益恒定。
小数(FRACTIONAL)字段具有两个子字段,小数低(FRACTIONAL LOW)(寄存器0x0A,B7:B0)和小数高(FRACTIONAL HIGH)(寄存器0x0B,B7:B0),且其可以用于对小数流的数据发送。这是因为已经定义了在系统时钟和每帧采样数(由重复字段来指定)和每帧的时钟循环(由长度字段来指定)之间的比率。通过设置小数字段,将小数过采样比Y/X定义为小数高(即Y)字段和小数低(即X)字段之间的比率。对于主设备52,该功能用于控制小数数据流且是可选的。缺省值为全零。小数高(X)字段和小数低(Y)字段还可以用于定义由抽取器和插值器使用的过采样比。在其他实施例中,对该字段的编码可以不同,但是依然用于指示两个二进制编码字之间的比率。
地址(ADDRESS)字段(寄存器0x0C和0x0D)可以用于选择主设备52和可选的从设备54在哪个寄存器上执行读取、写入或功能操作。其还可以在执行内部功能时由从设备使用。
功能(FUNCTION)字段(寄存器0x0E)可以用于定义在使用帧控制寄存器来开始功能操作时发起什么操作。
帧控制寄存器(frame control register)字段(寄存器0x0F)可被使用,其具有以下字段:帧控制、当前堆组和从设备地址。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,不同的实现可以用于这些字段,这些字段可以按不同方式来排序,或者可以存在使用的其他字段或使用的其他寄存器。例如,在备选实施例中,帧控制寄存器字段可以包括数据大小(DATA SIZE)和功率(POWER)字段。
帧控制(FRAME CONTROL)字段(寄存器0x0F,B7:B5)可以用于发起读取/写入/功能操作以及用于监视写入操作的进度。向该字段写入的解释的示例在图29i中示出。当从该字段读取时,返回的值将等于当前帧操作。在向该字段写入之后,可以立刻执行所需操作。之后,在本示例实施例中,该操作可以是PING操作。帧控制寄存器选择下一帧的操作模式。因此,为了发起读取操作,将读取操作的正确三比特代码常量(8或16比特读取数据)写入主设备52内的帧控制寄存器,然后设备寄存器读取操作将在下一帧开始。
当前堆组(CURRENT BANK)字段(寄存器0x0F,B4)可以用于选择从设备54应当用于指定数据传输的参数的当前寄存器堆组。该字段在PING和其他操作期间具有不同含义。缺省值为零。在PING操作期间,该字段可以用于选择哪个存储器堆组用于控制从设备54。因此,为了改变帧格式或音频模式,首先发出改变当前堆组比特的PING命令,使得连接到总线64的设备可以使用不同的存储器堆组。在其他操作期间,例如读取、写入和功能操作,该字段可以用于选择当前操作(即,读取、写入或功能)应用到哪个存储器堆组。这可以用于在两个备选寄存器集合之间选择,以在两个数据不同模式之间无缝切换,且在输出中没有任何小错误,例如在两个不同音频模式之间切换,且在音频输出中没有任何小错误。从设备54应当内部更新其自己的寄存器,使得在下一帧开始时使用新的设置。这样做的一种方式是对当前堆组比特进行比特拷贝到堆组字段(X12)上。从存储器0x02到0x07中的所有值由X12时隙(即,在X字中)来选择。在示例实施例中,每个从设备可以具有用于向端口流传输数据和从端口流传输数据的两种操作模式。在数据模式之间的实际改变将发生在发送X命令字之后的两帧边界之后(即,例如从设备可以在已获得了对X12比特的两个相等读数时,首先改变其内部堆组)。这意味着当堆组比特正在从一个值(例如,零)变为另一值(例如,一)时,从设备将使用具有与之前曾使用的值不同的值的辅助寄存器堆组(例如,备选寄存器集合0x02~0x07)。在堆组比特在PING帧中已改变的第二帧之后,该改变发生在所有从设备中。在读取、写入和功能操作期间通过相同堆组比特来选择两个寄存器堆组。当前堆组比特由主设备52用来确定下一帧的X12(堆组)比特的值。
从设备地址(SLAVE DEVICE ADDRESS)字段(寄存器0x0F,B3:B0)具有作为最高有效位的B3且可以用于指定所选从设备地址。重置之后的缺省值是“0000”。当使用从设备地址“1111”时,将向所有设备广播命令。然而,应当注意对广播命令的使用,因为如果从多个设备同时读取,则其可能导致模糊性。还可能存在以下实施例:可以定义主设备52选择的特定设备组,使得可以同时选择若干设备,如下面更详细描述的。
接口控制(INTERFACE CONTROL)寄存器(寄存器0x010)可以用于控制总线64的基本操作,例如,设置工作频率、时钟源和对多主设备操作的选择。在示例实施例中,接口控制寄存器包括以下子字段:MCLKD、时钟源(CLOCKK SOURCE)、启用多主(ENABLEMULTI MASTER)、启用主IRQ(ENABLE MASTER IRQ)、和请求多主(REQUEST MULTI MASTER),它们也在图32a中示出(在图32b中示出了与图29b相对应的备选实施例)。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,不同实现可以用于这些字段,这些字段可以按不同方式排序,或可以存在使用的其他字段或使用的其他寄存器。重置事件之后的接口控制字段的缺省值被设为“00010000”。
MCLKD时钟分频(clock division)字段(寄存器0x10,B6:B4)可以用于设置用于总线64的时钟信号的频率(即,时钟总线信号)。在实施例中,通过使用分频,总线时钟信号的频率可以根据外部时钟源信号(EXTCLK)导出。分频由接口控制字段的MCLKD字段来确定。在示例实施例中,外部总线时钟信号仅具有单一上升沿,但是主设备52的内部电路使用至少两个上升沿。因此,所有分频比基于因子二。图33a示出了在至少一个示例实施例中可以如何对MCLKD字段进行编码以节约空间。图33b示出了在与图29b相对应的实施例中可以使用的分频,在该情况下,单线总线实施例的用于分频的因子在倒数第二列中指定,以及双线总线实施例的用于分频的因子在最后一列中指定。当时钟分频比是“0000”时,总线时钟信号将停止且时钟输出将被驱动为低。采用PLL的系统可以使用定制寄存器来设置操作模式,例如低频或高频操作或者针对小数PLL时钟系统的除数(divisor)。MCLKD字段的缺省值是“0001”。
在至少一些实施例中,还可以将时钟信号线保持在静态电平(例如,低逻辑或高逻辑值),以节约功率。在该情况下,时钟分频器在上升时钟沿改变输出,除非分频比不是整数。因此,将整数分频值用于功率下降模式是有利的。此外,时钟改变发生在帧开始时。如果时钟分频因子是零,则不存在时钟输出。在该状况下,且如果多主模式未启用,则如果在时钟线上发生改变之前数据线改变,则时钟再次重启。这可以用于非常低功率的操作。在一些实施例中,系统将具有明确定义的再次开始时钟的时间(例如,1us),以能够快速响应来自UART控制器的请求,该UART控制器可以信号通知缓冲区满状况。在数据线改变后提供的初始时钟信号可以是比一般使用(通常是晶体振荡器)的时钟信号较不精确的时钟信号,例如RC驱动的驰张振荡器,其具有非常快速的启动时间(可以在单个微秒级别上)的优点。驰张振荡器将具有比高质量晶体振荡器相当多的抖动,且不适合高质量音频用途,在该高质量音频用途情况下,在采样事件中可以存在增加的精度。稍后,当主晶体振荡器已完全安定时,主设备52可以将时钟源改为其他源。通过使用该方案,有可能既在从低功率模式中恢复时获得快速启动时间以快速捕捉来自UART控制器的数据,由此不丢失数据,还依然能够提供用于精确音频用途的高质量低抖动时钟信号。
时钟源(CLOCK SOURCE)字段(寄存器0x10,B3)可以用于在两个不同时钟源之间选择。可选地,让主设备52支持该特征。可以存在高频时钟(例如用于音频用途的19.20MHz)和低频时钟(例如,用于低功率操作的32.768kHz)。在这些情况下,主设备52在这些时钟源之间选通或切换,使得在数据中不发生小错误。时钟源之间的改变可以在时钟信号为低时的帧结束处进行。在另一实施例中,主设备52可以禁用时钟,并使用总线保持器将时钟线留为低,以使得另一设备有可能驱动该时钟。在一些实施例中,时钟振荡器之一可以是高质量时钟源且另一时钟振荡器是具有较糟糕的抖动性能的快速安定时钟源。
启用多主(ENABLE MULTI MASTER)字段(寄存器0x10,B2)可以用于启用对多主设备的使用,且在其被设为一时活跃。如果主设备将该比特设为一,另一主设备可以开始在命令字段部分中写入命令。在PING操作期间,其用于确定X8比特的值。当从该比特读取时,其将返回上一次读取X9比特的状态。该比特可以由生成总线时钟信号的主设备激活。缺省设置是一(即,启用)。
启用主IRQ掩码(ENABLE MASTER IRQ MASK)字段(寄存器0x10,B1)可以用于在PING操作期间基于X9比特的激活来启用中断。当设为一时,X9比特将向主设备52生成IRQ。此外,可以类似于来自从设备的IRQ来处理X9比特(即,在本示例实施例中应当设置S0比特)。缺省设置是零(即,禁用)。
请求多主(REQUEST MULTI MASTER)字段(寄存器0x10,B0)可以被复制到X9比特上,且可以用于信号通知针对多主操作的请求。如果被许可,其应当再次释放该比特(即,将其设为零)。当读取该比特时,其将给出从总线64读取的上一个X9比特的状态。
IRQ掩码(IRQ MASK)寄存器(寄存器0x11)可以用于确定允许哪些事件向主设备52生成中断请求。图34a示出了在IRQ掩码寄存器中可以使用的子字段的示例(在与图29b相对应的图34b中示出了备选实施例)。在图34b的实施例中,子字段包括总线错误掩码(BUSERROR MASK)字段、IO错误掩码(IO ERROR MASK)字段、注意掩码(ATTENTION MASK)字段、S0延迟启用(S0 DELAY ENABLE)字段、连接掩码(ATTACHMENT MASK)字段、WRC掩码(WRC MASK)字段、RDC掩码(RDC MASK)字段、和帧完成掩码(FRAME DONEMASK)字段。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,不同实现可以用于这些字段,这些字段可以按不同方式排序,或可以存在使用的其他字段或使用的其他寄存器。IRQ掩码字段中的每个比特由主设备52来读取或写入。从设备可以间接设置或清除这些比特中的一些比特,例如,指示从状态等级“10”或更高,或通过改变设备状态等级。在备选实施例中(即图34a),WRC和RDC比特将由IOC(IO操作完成)比特和命令错误(COMMAND ERROR)比特(以监视X和Y字中的改变,用于多主操作)和对应掩码比特所取代。
总线错误掩码(BUS ERROR MASK)字段(寄存器0x11,B7)可以用于启用或禁用主中断。当该字段设为高时,其将基于状态寄存器中活跃总线错误比特来启用中断。该中断由有效低电平输出来信号通知,并在读取状态寄存器0x12时被清除。
IO错误掩码(IO ERROR MASK)字段(寄存器0x11,B6)可以用于启用或禁用I2C中断。当该字段设为高时,其将基于状态寄存器中的活跃IO错误比特来启用中断(即,不设置在读取/写入/功能命令之后的应答比特S14)。该中断由有效低电平输出来信号通知,并在读取状态寄存器时被清除。
注意掩码(ATTENTION MASK)字段(寄存器0x11,B5)可以用于通过激活S0比特基于从设备注意请求来启用或禁用主中断。当该字段设为高时,其将基于从状态等级“10”或“11”来启用中断。换言之,当启用注意掩码字段时,无论何时从设备54请求注意,主设备52都将生成中断。该中断由主设备52向控制器信号通知,作为有效低电平输出,并在读取状态寄存器时被清除。如果在下一帧期间从设备54依然请求注意且注意掩码字段依然启用,将生成新的中断。主设备52可以在IRQ发生时清除注意掩码字段,以避免生成多个中断。
S0延迟启用(S0 DELAY ENABLE)字段(寄存器0x11,B4)可以用于在从设备54请求注意时启用或禁用对读取、写入或功能操作的延迟。当S0延迟启用字段设为高时,其将基于在S0时隙期间从总线64读取的值来启用强制PING操作。当从设备54具有从设备状态“10”或“11”时,从设备54可以激活S0比特,以信号通知需要注意(即,从设备54可以在S0时隙期间复制其状态寄存器的MSB)。如果当前操作是读取、写入或功能操作,如果S0延迟启用字段和S0比特等于一,则其将被延迟到下一帧并被PING操作所替代。在下一帧开始时,将重新尝试读取、写入或功能操作。不管S0比特的值如何,PING操作都将不被改变的继续进行。通过启用S0延迟启用字段,如果任何从设备应当要求注意,将存在最多一帧的时延。在读取设备状态的同时,除了命令字之外的数据业务可以依然继续。如果S0延迟启用字段为“0”,不管S0比特的值如何,任何读取、写入或功能事务都继续进行。主设备52可以在信号通知IRQ时清除S0延迟启用字段,以避免阻塞对从寄存器的读取或写入。
连接掩码(ATTACHMENT MASK)字段(寄存器0x11,B3)可以用于通过启用或禁用这些中断来控制设备连接监视。当该比特为低时,禁用了由于活跃连接比特导致的任何中断。当该字段设为高时,其将基于与总线64连接或移除的设备来启用中断,且由此将连接比特设为高。这可以发生在从设备改变其状态值的情况下,或者发生在从设备被从总线64上移除的情况下(由此,在PING操作期间不进行信号通知有效地改变其状态值),或发生在从设备不再与主设备同步且由此停止信令的情况下,或发生在从设备与主设备同步(在物理连接之后或在以获得同步之后)且该状态值已通过PING操作来读取的情况下。当读取状态寄存器0x12(即,包含连接比特的寄存器)时,清除连接中断。如果读取的状态值指示需要来自主设备52的干预(即,状态值是“10”或“11”),主设备52的控制器的正常操作将是从从状态寄存器读回设备状态值,以找到中断的源。在这完成之后,可以通过向需要注意的从设备写入寄存器控制命令来执行任何必需的动作。
WRC掩码(WRC MASK)字段(寄存器0x11,B2)可以用于启用或禁用中断。IRQ掩码寄存器0x11启用和禁用通过外部或内部的专用(即,物理)中断线路直接去往主设备52的中断这些中断与来自从设备的中断不同,来自从设备的中断通常是在完成写入操作之后通过总线64来传输的,且不通过来自主设备52的专用线路。中断是从主总线控制器通过专用线路直接传输的。当该字段设为高时,其将基于活跃写入操作的完成来启用中断。这可以通过在WRC比特上从高至低的转换来发现。中断可以通过有效低电平输出来信号通知。当读取状态寄存器0x12时可以清除该中断。在备选实施例中(即,图34a),该比特可以用于对完成IO操作进行掩码,以及用于在完成了IO操作(读取/写入/功能)时启用中断。对中断的掩码将类似于WRC掩码字段。
RDC掩码(RDC MASK)字段(寄存器0x11,B1)可以用于在完成读取操作之后以类似于上面针对WRC掩码字段描述的方式来启用或禁用来自主设备的中断。当该字段设为高时,其将基于活跃读取操作的完成来启用中断。这可以通过在RDC比特上从高至低的转换来发现。中断可以通过有效低电平输出来信号通知。当读取状态寄存器0x12时可以清除该中断。在备选实施例中(即,图34a),该比特可以用于对命令错误中断进行掩码,即由除了主要主设备之外的设备对位于X和Y字中的比特的改变。当不许可多主模式时,这可以用作安全预防。在多主操作模式下,应当禁用该IRQ掩码比特。
帧完成掩码(FRAME DONE MASK)字段(寄存器0x11,B0)可以用于启用或禁用在上升时钟沿完成帧时激活的主中断(通过专用线路信号通知,或在备选实施例中通过I2C来信号通知)。当该字段设为高时,其将基于内部帧计数器的完成来启用中断。主设备52中的内部帧计数器在充电模式期间应当依然运行,如图35所示,图35示出了用于改变帧完成掩码字段的示例时序图。在充电模式下,接通接口70中的功率晶体管76(参见图3b)。
参见图36a,在示例实施例中,接口状态(INTERFACE STATUS)寄存器(寄存器0x12)包括多个子字段(在与图29b相对应的图36b中示出了备选实施例)。在图36b的示例实施例中,接口状态寄存器包括:总线错误(BUS ERROR)字段、IO错误(IO ERROR)字段、状态1(STATUS1)和状态0(STATUS0)字段、连接(ATTACHMENT)字段、WRC字段、RDC字段、帧完成(FRAME DONE)字段和从状态(SLAVE STATUS)字段。这些字段可以使用寄存器的一个或多个比特来实现。在备选实施例中,不同实现可以用于这些字段,这些字段可以按不同方式排序,或可以存在使用的其他字段或使用的其他寄存器。在重置事件之后的接口状态寄存器的缺省值可以是“00000000”。一般而言,接口状态寄存器具有来自总线64的状态信息,且用于控制IRQ。在备选实施例中(即,图36a),WRC和RDC比特将由IOC(IO操作完成)比特和命令错误比特和对应掩码比特所替代(以监视X和Y字中的改变,用于多主操作)。在PING操作期间,多主操作既可以使用这些比特,也可以使用X9和X8比特。这可以用在多个I2C连接的情况下或用于测试目的,其中,外部单元可以读回连接到总线64的设备的内部状态,而不要求对系统硬件或软件的改变。
在操作中,接口状态字段可以用于提供来自总线64的状态信息,并激活针对主设备52的IRQ。其通过主设备52或从设备54的读取、写入、PING和功能操作来控制。接口状态寄存器中的每个比特可以由主设备52来读取和使用。该字段辅助控制主设备52和从设备54之间的数据通信,且还可以用于监视连接到总线的从设备的状态。
总线错误(BUS ERROR)字段(寄存器0x12,B7)可以用于指示在其有效高电平时已发生了非法总线操作。该状况可以在主设备52正在驱动总线64时总线64上的值不同于其应当的值的情况下检测到(例如,从设备正在与同步模式冲突)。一旦检测到非法总线操作,其将保持被设置,直到已读取了总线错误字段为止。如果观察到非法总线操作且启用了对应IRQ掩码(即,设为高),则将生成中断。当已许可了多主操作状态时(PING操作中的释放总线(RELEASE BUS)比特(X8)为零),应当忽略命令字的X和Y字段中的任何总线冲突,因为假定这些冲突是由另一主设备引起的。在该情况下,另一主设备52将写入奇偶性比特。
IO错误(IO ERROR)字段(寄存器0x12,B6)可以用于指示读取/写入/功能操作期间的错误或在PING操作期间的奇偶性错误(即,数据中的错误)。如果从设备54不对读取、写入或功能命令进行应答,则将设置IO错误字段。例如,如果被寻址的从设备未激活读取或写入或某些功能命令之后的应答比特S14,则将设置IO错误字段,且如果在完成PING或某些功能命令之后激活了应答比特S14,则也将设置IO错误字段。在读取状态寄存器0x12之后,重置IO错误字段。该方案允许通过读取单一寄存器来检查总线64上的所有总线业务的错误。
状态1(STATUS1)和状态0(STATUS0)字段(寄存器0x12,B5:B4)可以用于存储从连接到总线64的任何从设备读取的最高状态等级。如果任何从设备具有高于状态1和状态0字段指示的状态等级,在下一个PING操作期间这些字段将被更新到该新的值。对接口状态寄存器的读取将不清除状态1和状态0字段。这些字段是在每个PING操作和上电重置事件期间更新的,且从而是有效的。作为示例,在重置之后从状态等级是“00”,且在从设备连接到总线64之后是“01”。然后假定从设备需要紧急注意,并在PING操作期间信号通知“11”作为从状态,然后将状态1和状态0字段更新为该值。在读取从状态寄存器之后,值依然是“11”。假定在下一帧期间最高从状态等级现在是“10”。在该PING操作的结束时,将状态1和状态0字段更新为该新的值(“10”)。这样做使得当从设备指示情况如此时首先清除错误。如果已启用了对应中断掩码比特且作为从设备请求注意的结果生成了中断,将在读取接口状态寄存器时清除从主设备52到控制器的IRQ线路。如果从设备依然请求注意且设置了终端掩码比特,在下一个PING操作期间将生成新的中断。在正常操作期间,从该字段进行读取将返回“01”,即,一个或多个从设备连接到总线64且不存在针对特殊服务的要求。因此,状态1和状态0字段都可以用于确定是否任何从设备连接到总线64或者用于区分要求注意的具有低优先级(例如,状态等级“10”)或高优先级(例如,状态等级“11”)的从设备。如果没有从设备连接到总线64,状态1和状态0字段将被设为“00”。
连接(ATTACHMENT)字段(寄存器0x12,B3)可以设为有效高电平,以指示从上一次PING操作开始从设备与总线64断开连接还是连接。可以通过将在PING操作期间X和Y字中指示的从设备的状态等级与从设备的之前状态等级进行比较来发现连接字段的值。如果任何从设备的状态等级从{“01”,“10”,“11”}变为“00”(即,从设备已与总线64断开连接),则将连接字段设为低。在存在多于一个主设备的情况下,任何辅助主设备将类似于任何从设备一样连接到总线64,且以类似于从设备的方式用设备地址来枚举。如果状态从“00”变为{“01”,“10”,“11”}(即,从设备连接到总线64),还将连接字段设为高。连接字段将在被设置之后停留在高(“1”),直到读取了接口状态寄存器为止,在该时刻,对其进行清除。在任何其他情况下,连接字段将停留在低。在重置事件之后连接字段的缺省值是“0”。
WRC字段(寄存器0x12,B2)可以用于指示写入操作的完成。该比特意味着写入操作的激活且是有效高电平。在针对帧控制寄存器的写入之后激活该字段。其将保持为高,直到写入操作的结束为止,紧接在写入S14(应答)比特之后。如果IO错误发生(例如,没有应答),该比特不重置,直到在读取了状态寄存器之后为止。将在下一帧开始尝试执行写入操作。除非被设备中断所延迟(即,激活S0比特和S0延迟),否则写入操作将继续进行;否则其将被延迟到下一帧并再次尝试。在完成写入操作之后,在S14中有效ACK之后将立刻设置该比特。如果从设备不对写入操作进行应答,则将设置IO错误字段且将不重置WRC字段。在该情况下,其在读取该寄存器之后将被首先重置。在备选实施例中(即,图36a),该比特可以用于指示对IO操作的完成以及在IO操作(读取/写入/功能)完成时启用中断。该比特可以是有效高电平。
RDC字段(寄存器0x12,B1)可以用于指示读取操作的完成。该比特意味着读取操作的激活且是有效高电平。在针对帧控制寄存器的写入之后将其设为高。其将保持为高,直到读取操作的结束为止,紧接在写入S14(应答)比特之后。如果IO错误发生(例如,没有应答),该比特不重置,直到在读取了状态寄存器之后为止。除非被设备中断所延迟(即,激活S0比特和S0延迟),否则读取操作将继续进行;否则其将被延迟到下一帧并再次尝试。在完成读取操作之后,在S14中有效ACK之后将立刻重置该比特。如果从设备不对读取操作进行应答,则将设置错误IO字段且RDC字段将不走低。在该情况下,其在读取该寄存器之后将被首先重置。在备选实施例中,该比特可以用于指示除了主要主设备之外的设备对X和Y字中的任何比特(例如,命令错误)的改变。该比特是有效高电平。在一些实施例中,如果命令字(S、X、Y)中任何比特已变为与主设备52允许的值不兼容的值,则命令错误将变为活跃。作为示例,如果S字内的比特或X字内的命令类型(B15:B13)改变,这是对电子噪声或另一设备尝试接管总线64的指示。然而如果另一设备已请求能够控制总线64(经由请求总线命令)且主设备已允许该请求(经由释放总线命令),则X字中的改变应当被允许,且不导致对命令错误的激活。
帧完成(FRAME DONE)字段(寄存器0x12,B0)可以用于指示已完成了帧。在帧的最后一个比特处将帧完成字段设为有效高电平。因此,帧完成字段可以用于与总线64的基本时序的同步操作。在实施例中,当设备正在被充电时,帧完成字段依然有效,没有数据通信活跃且帧计数器通常内部运行。帧完成字段将继续被设置,直到读取了状态寄存器为止。帧完成字段可以用于表明是否已完成了PING操作或用于基本时序,例如对在开始通信之前的特定帧数目进行计数,以确保所有设备被充电。当启用对应IRQ掩码比特时,在每一帧结束时将产生中断。
从状态(SLAVE STATUS)字段(寄存器0x13~0x15)可以使用主设备52内驻留的寄存器来实现并将指示连接到总线64的具有从地址0~11的从设备的状态。这些寄存器包含12个值,每个值是两个比特,总共三个字节,对应于从设备0~11的状态。在一些实施例中,不可能直接监视从设备12~14(设备15预留用于广播),但是它们依然可以通过激活S0比特来发出中断。在一些备选实施例中,地址12~14用于对设备组进行寻址,如下面更详细描述的。在任一情况下,在PING操作期间读取状态值。将从任何从设备读取的最高状态值与对应的两比特无符号状态比特进行比较。如果该从状态值大于这些比特中的值,将这些比特更新为该新的值。当读取从状态寄存器时,不清除其值,但是在下一个PING操作期间将对其值进行覆盖,即,如果从来自一个从设备的从状态寄存器中读取了最大值“11”且在下一个PING操作期间的最大值是“10”,则在完成下一个PING操作时将该设备的从状态寄存器值更新为“10”。所有三个从状态寄存器的初始值在重置操作之后是“00000000”。如果在总线64上不存在从设备,则没有东西将被激活,且在总线64上将读取恒定的高电平,这等于逻辑零,因为负逻辑信令方案用于总线64的该示例实施例。
针对图29b的备选示例实施例,与图29a中示出和描述的寄存器定义相比,存在不同的寄存器定义。具体地,图29b中的定义包括了帧速率(FRAME RATE)字段、过采样(X)(OVERSAMPLE(X))字段、过采样(Y)(OVERSAMPLE(Y))字段、多主(MULTI MASTER)字段、功率控制(POWER CONTROL)字段、和时钟分频(CLOCK DIV)字段。其他字段类似于图29a中所示的字段,但是可以位于不同寄存器中和/或具有向该字段指派的不同数目比特,且针对图29b一般将不讨论它们。过采样(X)过采样(Y)字段对应于图29a的小数(低)和小数(高)字段,且将不讨论。如将要讨论的,与图29a的启用多主字段相比,图29b的多主字段具有不同的含义。时钟分频字段类似于图29a的MCLKD字段,且将不讨论。
帧速率(FRAME RATE)字段(寄存器0x009,B7:B0)可以用于定义总线64的系统频率。在实施例中,该值可以用200kHz为单位来定义,被编码为无符号二进制。可以将针对12.2MHz和11.2MHz来编码的值视为12.288和11.2896MHz(且对于其倍数是相同的)。
在图30中示出了基于图29b的帧控制字段的示例实施例的写入和读取操作的组合。在至少一个实施例中,且针对图29b,帧控制字段的第一比特(B7)提供了待处理的写入操作的状态,并且是有效高电平。寄存器写入操作可以通过控制器向主设备52的数据寄存器(WD15:WD0或WD7:WD0)写入然后向主设备52的地址寄存器(ADDR6~0以及针对8比特写入操作可选的REG7~0)写入来开始。然后控制器可以通过写入IO控制寄存器(IOC)并设置B7:B6=“10”来开始实际写入操作。然后尝试执行写入寄存器操作可以在下一帧开始。除非被设备中断所延迟,否则写入操作将继续进行,否则其将被延迟到下一帧并再次尝试。在完成写入操作之后,除了在错误状况期间,在写入Y字的最后一个比特之后将帧控制字段再次立刻重置为“00”。如果存在IO错误,则帧控制字段的第一比特将继续停留在高,直到已读取并清除了IO错误比特为止。这使得主设备52能够找到IO错误的源。当写入控制比特(寄存器0X00F,B7,即,帧控制字段的第一比特)为高时,不应当发起新的读取或写入操作,直到写入控制比特返回低为止。
在实施例中,在同一操作中既激活写入控制比特也激活读取控制比特是非法的。该状况被主设备52所忽略,且在该情况下可以维持比特B7:B6的前一状态。在该情况下,主设备52可以将该状况编码为PING操作(即,无改变)。
在至少一个实施例中,图29b的帧控制字段的读取控制(READCONTROL)比特(寄存器0x00F,B6)可以用于发起并监视这些操作的进度,在图31中示出了其示例。从读取控制比特中读取将给出任何待处理操作的状态。数据和地址寄存器将用于读取和写入操作。在操作完成之后,将再次重置该读取控制比特。如果存在IO错误,读取控制比特将继续停留在高,直到以读取并清除了IO错误比特为止。这使得主设备52能够找到IO错误的源。在其他实施例中,可以通过寄存器0x00F的比特B7~B5来确定操作类型(即,PING/功能/写入8比特/读取8比特/写入16比特/读取16比特)。
当操作进行时,不发起新的操作。当帧控制字段=“11”,发起功能操作。将利用了功能数据字段的功能类似于读取/写入操作来对待(针对从帧控制字段中读取)。将通过功能寄存器(0x15)来确定执行的功能操作的类型。
数据大小(DATA SIZE)(寄存器0x00F,B5)字段可以用于选择读取和写入操作的数据宽度。数据大小字段中的逻辑零导致8比特数据,且数据大小字段中的逻辑一导致16比特数据操作。在上电重置事件之后的缺省值是“0”,即8比特操作。
启用多(ENABLE MULTI)字段(寄存器0x15,B7)可以用于其实启用对多帧同步的DS0比特的使用(即,同步通过多个帧发送的数据)。当将启用多字段设为一时,启用了多帧同步,且时钟分频器字段可以用于选择以帧数为单位的距离,其中,DS0比特可以设为一(一般为零)。这可以由从设备54用于在一些数据操作模式下的高效数据传输。当将启用多字段设为一时,将不更新时钟分频器字段。在将启用多字段从零变为一时,接下来的第一帧将DS0比特设为一。对DS0比特的激活时通过使用设置过采样比功能向数据寄存器写入过采样比来进行的。作为示例,如果寄存器0x0000设为0x02且寄存器0x0001设为0x01(针对这些寄存器,参见图16b),则每隔一帧将DS0比特设为等于1。
图29b的功率控制(POWER CONTROL)字段(寄存器0x15,B5)可以用于控制单线实施例的总线64的操作。如果功率控制字段设为0,则当在总线64上发送数据时不存在对从设备的充电。如果功率控制字段设为1,则当总线上没有数据传输时,存在对从设备的充电。在帧的最后一个比特处内部更新功率控制字段,而不管从I2C命令中接收到该信息的时间如何。
应当注意到:在第一备选示例实施例中,图9a、16a、22a、22b、25a、25b、29a、29c~29i、32a、33a、34a和36a所示的示例实施例可以一起使用,而在第二备选示例实施例中,图9b、16b、17、22c、25c、29b、30、31、32b、33b、34b和36b所示的示例实施例可以一起使用。在本段中未提到的其他附图中示出的示例实施例与第一和第二备选示例实施例都可以一起使用。
在至少一个实施例中,最高12个从设备(0~11)可以响应以状态数据。忽略主设备12对从状态寄存器的任何写入(无动作)。在图37中示出了从状态寄存器的示例定义,然而在其他实施例中可以使用其他定义和另一数目的从设备。
在至少一个实施例中,在向首先连接到总线64的从设备进行地址的动态地址分配中使用部件ID中的制造商编码序列。如现在将要描述的,这可以通过使用紧凑编码格式或一般编码格式来进行。
在示例实施例中,紧凑编码格式将部件ID编码为32比特,该32比特可以用作从设备54的设备ID。如图38a所示,该格式包括位置编码、制造商和部件号。在该示例实施例中,位置编码允许高达十五个值(1~15),将制造商名称编码为两个字母,且以二进制形式对部件号编码,且部件号允许五个十进制数字(在本描述中稍后解释位置编码)。在制造商名称中使用的字母使用了每个字母的ASCII字母码的五个最低有效位,即A=“000001”,B=“000010”等等。选择制造商名称的两个字母,以得到独有的两字母缩写。主设备52可以在使用紧凑编码格式时读取四个字节的信息。如果主设备52使用16比特读取操作,在每个读取操作期间将返回两个字节。最高有效字节表示第一个字节,而最低有效字节表示第二个字节。
紧凑编码格式的示例现在如下所述。假定制造商XMCO想要对名为XM007000的部件编码。则头两个字母是制造商代码“XM”,部件号是“07000”且没有位置信息。紧凑编码使用B31=“0”。由于不存在位置信息,这导致B30:B27=“0000”。字母“X”具有ASCII码88,且字母“M”具有ASCII码77。可以通过从原始值减去64将ASCII码从八个比特压缩为五个比特。因此,比特B26:B17等于{′X′-64,′M′-64}={24,13}={″11000″,″01101″}。备选地,可以根据将ASCII码与0x1F进行逻辑与来得到这五个比特,从而找到这些值。然后将部件号转换为二进制,即“07000”=“0x1B58”=0.0001.10101.0101.1000。因此紧凑编码格式下的32比特ID是{B31,B30:B27,B26:B17,B16:B0}=″0000.0110.0001.1010.0001.1011.0101.1000″}=0x061A.1B58。
在示例实施例中,一般编码格式将部件号定义为ASCII字符序列,以对从设备54的设备ID进行编码,在图38b中示出了其示例。部件号可以具有以空(NULL)字符(即,等于零的字节)结束的表达为ASCCI串的任何名称。第一字节用于对格式(即,短编码或一般编码)、部件等级和可选的位置信息编码。第二字节用于指示总线的版本和芯片的版本。第二字节之后的字符被解释为使用ASCII值的部件名称。部件等级可以用于在特定部件的不同类型质量之间加以区分。总线版本可以始于等价于版本1.00的版本“0001”。芯片版本可以始于版本“0000”且针对后续版本递增。芯片版本号的递增不一定是具有单一步长的。例如,第一版本可以是“0000”,之后较晚版本“0001”、“0011”、“0111”以及最终“1111”用于最后的版本,而不是计数“0000”、“00001”、“0010”等。该方案可以用于现实原因(更容易进行金属掩模改变),但是越大的号码一般对应于越新的版本。如果主设备52使用16比特读取操作,则在每个读取操作期间将返回两个字节。八个最高有效位表示第一字节,八个最低有效位表示第二字节。当串具有奇数个字节时,其将不适合16比特数据读取。因此,如果预期是单一字节来终止该串且读取字,则使用最高有效字节,例如当序列在字边界的中间终止时,最高有效字节为零。在该模式下在ID中不存在等于零的字节,以确保不过早终止序列。此外,在对部件编码时不使用除了实际制造商之外的制造商名称。
一般编码格式的示例现在如下所述。制造商ADI想要用部件名称“ADI-SSM2377ACBZ-RL”对运输(ship)进行编码。芯片不具有位置信息且部件等级为“A”。总线版本是第一官方版本1.00=“0001”。芯片的版本是第一版本=“0000”。一般编码由16比特压缩信息字段后接以ASCII编码的部件号来进行。编码如下进行:B7=′1′(一般编码),B6:B3=“0000”(无位置信息),B2:B0=“000”(部件等级A),即第一字节读取是0x80。第二字节是总线版本后接芯片版本,即“0001”&“0000”=0x10。使用多个读取从地址零读取的全部件名称是(示出了实际字符,返回值是这些字符的ASCII编码):{‘A’,’D’,‘I’,‘-‘,’S’,’S’,’M’,’2’,’3’,’7’,’7’,’A’,’C’,’B’,’Z’,’-‘,’R’,’L’}。读取的最后一个字节是空:B7:B0=“00000000”。假定该设备具有最高仲裁优先级,从设备0、地址0读取将导致以下值序列:{0x80,0x10,0x41,0x44,0x49,0x2D,0x53,0x53,0x4D,0x32,0x33,0x37,0x37,0x41,0x43,0x42,0x5A,0x2D,0x52,0x4C,0x00}。
有时必须基于若干相同部件在板上的位置布置来区分它们,因为这些设备可能包含相同的部件信息。在该情况下,使用额外的字段,以在这些设备之间区分,以能够向它们指派独有的从地址。将位置字段用于该目的。在实施例中,位置字段可以具有16个不同的值。值“0000”被预留用于位置信息不可用或不必要的情况。剩余15个值用于指示位置。
可以用各种方式来指定设备的编号。例如,如果在手持单元中存六个麦克风(现在如下定义),可以向主麦克风指派位置1,可以向左麦克风指派位置2,可以向右麦克风指派位置3,可以向背部的噪声麦克风指派位置4,可以向第二噪声麦克风指派位置5,以及可以向扬声器旁边的麦克风指派位置6。
作为另一示例,当使用头戴式耳机中的多个麦克风时,可以使用以下编号方案:可以向左主麦克风指派位置1,可以向右麦克风指派位置2,可以向左耳外部麦克风指派位置3,可以向右耳外部麦克风指派位置4,可以向左耳内部麦克风指派位置5,可以向右耳内部麦克风指派位置6,以及可以向附加左麦克风指派位置7。
作为另一示例,对于DOLBYTM环绕声音多扬声器系统,可以使用以下编号方案:可以向左前扬声器指派位置1,可以向右前扬声器指派位置2,可以向中间扬声器指派位置3,可以向左后扬声器指派位置4,可以向右后扬声器指派位置5,可以向低音炮扬声器指派位置6,可以向侧左扬声器指派位置7以及可以向侧右扬声器指派位置8。
在至少一个实施例中,可以基于元素的位置针对多个元素进行一般位置指派。例如,首先可以将元素从左到右排序(首先左),然后可以将元素从前到后排序(首先前),然后可以将元素从上到下排序(首先上),然后可以将元素从最大到最小排序(首先是最大的)。
如前所述,统一总线通信协议基于操作模式具有不同的帧格式。在字操作模式下,使用字帧格式。在比特流操作模式下,使用比特流帧格式或统一帧格式。字、比特流和统一帧格式的示例现在如下所述。
现在参见图39,其中示出了在单一时间帧的字模式下使用的字帧格式。在主设备52和从设备54之间的通信发生在帧期间,帧以S字开始,之后是X字,然后是Y字。在S字和命令字之间,取决于使用场景,可以存在分配用于数据发送的空白空间。空白空间的长度由命令分隔寄存器来定义。
主设备52发送的S字允许物理连接到总线64的从设备进行锁定(即同步),以与主设备52通信(在本描述中稍后更详细地描述同步方法)。对S字的发送还允许主设备52确定是否已设置了要求注意的任何中断。
在S字和X字的发送之间,可以通过总线64来发送可以由从设备54或主设备52中的至少一个挑选的随机数据或信息。该信息包括(但不限于):比特流、音频数据或诸如传感器数据之类的其他数值数据。对X字的发送允许主设备52和从设备54确定是否要执行该功能,或确定至少一些从设备的状态,或指定操作的一部分地址。在X字的发送之后(假定不存在设置的中断),可以通过总线64来发送如前所述的进一步数据。然后发送Y字,取决于操作,Y字为至少一些从设备提供了操作或状态信息的进一步地址信息或数据信息。
现在参见图40,其中示出了针对单一时间帧的字帧格式的示例实施例。在该示例中,命令分隔是0比特,其是最小分隔值,因为控制字彼此相接且帧长度为3*(4*命令分隔值+16)=3(4*0+16)=48比特。由图40中表格的最上一行和第一列定义的比特号指示了在总线64上在哪个时隙中发送比特,例如时隙0x02E包含比特Y1。该帧格式对于仅传输控制数据或在短时间量上使用用于控制数据的非常高带宽的情形是有用的。如果需要,当前堆组寄存器比特可以用于改变到该数据模式或从该数据模式改变。
现在参见图41,其中示出了字模式下用于单一时间帧的字帧格式的另一示例实施例。在该示例中,命令分隔是4*28=112比特且帧长度是3*(4*28+16)=3*(128)=384比特。该示例示出了五个音频数据信道(A、B、C、D和E)以及两个未使用的数据信道,且每个信道具有16比特。该示例非常好的适合6.144MHz总线时钟和48kHz采样频率。如果值是“Z”(即,三态),主设备52将驱动“0-1-Z-Z”模式。如果值是“0”,主设备52将驱动“0-1-0-0”模式。如果值是“1”,主设备52将驱动“0-1-Z-Z”模式。如果值由从设备54来确定,主设备52将驱动“0-1-Z-Z”模式,同时从设备54针对单线情况根据从设备54正在发送的比特的值将驱动“Z-Z-U-0”模式或“Z-Z-Z-Z”模式。所示的数据格式良好的适合12.288MHz导出总线时钟且存在示出的5个活跃音频源。然而,由于该数据格式允许同时最高七个活跃源,因此在帧中存在两个未使用的信道或空白信道。
现在参见图42,其中示出了比特流模式下针对单一帧的比特流帧格式的示例实施例。在该示例中,比特流帧格式包括四个比特流帧信道:控制信道(帧信道0)和三个比特流数据信道(帧信道1至3)。比特流帧信道的集合在每行的比特0、4、8和C处开始,且针对每个比特流帧信道以一次一个比特的方式来发送。控制信道用于发送来自S字的比特,后接来自X字的比特,后接来自Y字的比特。比特流数据帧信道用于发送来自不同比特流数据信道的比特。在本示例中,发送来自控制帧信道的1个比特,后接来自比特流数据帧信道1的1个比特,后接来自比特流数据帧信道2的1个比特,后接来自比特流数据帧信道3的1个比特。因此,命令分隔值等于3个比特(即,每4个比特存在来自所发送的S字、X字或Y字的命令比特)。比特长度是4*48=192比特。
图42所示的帧的帧结构实际是48行和3列。然而,根据比特号示出该帧,比特号对应于在总线64上发送该比特的时隙。应当理解:用于该帧的时隙在最上一行的左侧角落处开始,并继续到最上一行的结束,然后从下一行的左侧开始到该行的结束,且依此类推。
数据被构造为具有图42所示的帧格式的典型场景是当存在两个具有数字输入的D类放大器和数字麦克风且放大器和麦克风均生成比特流数据时。另一场景是生成比特流数据的三个数字麦克风。在该情况下,可以例如在3.072MHz上对三个数字麦克风采样,且总线时钟频率可以是6.144MHz。因此,该帧格式适用于对发射机和接收机的多个比特流数据信道进行交互。该比特流帧格式实现了处理中的小的延迟,因为在通过总线64发送的每个比特流数据信道之间仅存在一比特时延。此外,使用该方案,用于生成比特流的∑Δ转换器的过采样率不被限制为特定值,因为稍后可以由系统来使用按任何值进行抽取。在实践中,为了支持12.288、19.20和26.00MHz时钟系统,使用有线和有穷数目的过采样比。
现在参见图43,其中示出了可以在比特流模式下使用的单一时间帧的统一帧格式的示例实施例。在该示例中,同一帧格式包括控制信道(帧信道0)、五个比特流数据信道(帧信道1至5)和两个虚拟帧信道(帧信道6和7)。统一帧格式是使用至少一个虚拟帧信道的帧格式。虚拟帧信道发送以下数据:该数据是从数字字数据转换过来的(即,在输入数据的情况下)或者该数据将被转换为数字字数据(即,在输出数据的情况下)。通过在由对应虚拟帧信道指定的时隙中以一次一个比特的方式发送数字数据,将数字子数据转换为比特流。
在该示例中,帧信道在每行的比特0和8处开始,且从每个帧信道以一次一个比特的方式发送。因此,命令分隔值等于7个比特(即,每8个比特存在来自S字、X字或Y字的命令比特)。帧长度是8*48=384比特。该帧的帧结构实际是24行和8列。然而,根据如前所述的比特号来示出了该帧。
数据被构造为具有图43所示的格式的典型场景是当存在生成比特流数据的五个数字麦克风和接收比特流数据或可以根据虚拟帧信道提供的比特流数据来重构数字字数据的两个扬声器时。在该示例中,五个数字麦克风信道(帧信道M0至M4)可以在768kHz上(其等价于16kHz采样频率且抽取比48),以及两个虚拟帧信道(帧信道A和B)是均可以在48kHz上具有16比特二进制字的两个音频信道。总线时钟频率可以在6.144MHz上。
现在参见图44,其中示出了在比特流模式下使用的单一时间帧的统一帧格式的另一示例实施例。在该示例中,统一帧格式包括控制信道(帧信道0)、五个比特流数据信道(帧信道1至5)和两个虚拟帧信道(帧信道6和7)。然而,在本示例中,每个虚拟帧信道具有至少两个字数据信道的数据。因此,在本示例中,两个虚拟帧信道用于携带来自四个字数据信道的数据。例如,帧信道6具有与字数据信道C和字数据信道A相对应的比特流数据。帧信道6用于针对使用字数据信道C的设备的接收或发送数据,以及针对使用字数据信道A的设备的接收或发送数据。时隙先用于字数据信道C,然后用于字数据信道A。此外,帧信道7具有与字数据信道D和字数据信道B相对应的比特流数据,其中,时隙先用于字数据信道D,然后用于字数据信道B。在该情况下,虚拟帧信道中的数据当其在总线64上发送时是数据字数据的比特流版本。数据同步比特(DS0)可以用于同步与跨若干帧的字数据相对应的比特流数据,以避免在数据信道的数据开始和结束时(例如,A或C)的模糊性。为了节约空间,DS0和DS1比特在PING帧的中间传输,即不正好在帧开始之前。这些比特用于将小数计数器重置为已知值(例如,零),然后在每个子帧期间将其递增给定相位。然后溢出比特用于选择数据来自源(即,数据信道)A还是源C。在S字之后的第一比特处开始帧,此时关于寄存器堆组选择和数据同步已更新了对应的一个或多个从设备。在使用字数据信道的各个设备处,将数字字数据与比特流数据复用,以在总线64上发送,或将统一比特流版本解复用为由设备使用的数据。作为示例,系统可以包含接收比特流数据的两个数字放大器和针对蓝牙或数字FM接收机或发射机的连接。第一从设备(即,放大器)将使用比特流数据或复用的TDM数据,而其他设备将使用复用的TDM数据。
在本示例中,帧信道在每行的比特0和8处开始,且从每个帧信道以一次一个比特的方式发送。因此,命令分隔值等于7个比特(即,每8个比特存在来自S字、X字或Y字的命令比特)。帧长度是8*48=384比特。该帧的帧结构实际是24行和8列。然而,根据如前所述的比特号来示出了该帧。数据被构造为具有图44所示的格式的典型场景是当存在生成比特流数据的五个数字麦克风和生成或使用数字字数据的设备的四个辅助音频信道时。例如,五个数字麦克风信道(帧信道M0至M4)可以具有数据速率1.536MHz(其等价于24kHz采样频率且抽取比64),以及四个数字字信道(A、B、C和D)均表示在48kHz上采样的单一音频信道,且子长度16比特。总线时钟频率可以在12.288MHz上。
现在参见图45a至48c,其中示出了统一总线通信协议的总线频率、信道的数目和类型的有用组合的示例。这些附图中的表格已根据外部时钟频率来排序,该外部时钟频率用作总线64的基准时钟信号。在双线总线实施例中,或者对于将列出的频率加倍的外部时钟信号,可以使用具有奇数分频比的配置。可用的控制带宽具有与快速模式I2C总线相同的量级。使用16比特数据的400kHz I2C总线对应于每秒12.5kHz操作。
现在参见图45a和45b,其中示出了在字模式下工作时统一总线通信协议的实施例的总线频率、信道的数目和类型的示例组合的表格。可以通过观看图45a的表格的第6行中的示例来理解这些表格。在该情况下,存在五个音频信道,每个音频信道24比特长,且被重复两次,使得子帧长度是5*24*2+16=256比特,其中,附加的16比特是用于子帧中的控制字。重复意味着在每个子帧中从每个信道获取两个数字字。对于来自数据信道A、B、C、D和E的数据,该重复可以根据A-A-B-B-C-C-D-D-E-E来进行,但是为了更低的时延,可以使用A-B-C-D-E-A-B-C-D-E。由于子帧中存在16个控制比特,子帧中用于控制数据的带宽是16/256=6.3%。图45a的行3所示的示例非常适合S/PDIF兼容性。
针对图45a,行1中的示例在字模式下在子帧中将一个音频信道重复三次。行2中的示例在字模式下在子帧中将一个音频信道重复一次。行3中的示例在字模式下在子帧中将两个音频信道重复两次。行4中的示例在字模式下在子帧中将三个音频信道重复一次。行5中的示例在字模式下在子帧中将三个音频信道重复四次。行6中的示例在字模式下在子帧中将五个音频信道重复两次。行7中的示例在字模式下在子帧中将六个音频信道重复两次。行8中的示例在字模式下在子帧中将十二个音频信道重复一次。在这些示例中,可以根据在帧中分配用于数据的帧信道的数目和这些帧信道的宽度来减少控制信道的带宽。
针对图45b,行1中的示例在字模式下在子帧中将四个音频信道重复四次。行2中的示例在字模式下在子帧中将六个音频信道重复四次。行3中的示例在字模式下在子帧中将八个音频信道重复两次。行4中的示例在字模式下在子帧中将十二个音频信道重复两次。在这些示例中,控制信道的带宽是十二个音频信道中每个音频信道的带宽的一半。
现在参见图46a和46b,其中示出了在比特流模式下工作且使用比特流帧格式时统一总线通信协议的实施例的总线频率、过采样率和信道的数目和类型的示例组合的表格。这些组合可以例如用于若干数字麦克风的组合。还有可能使用交织比特流信道来扩展比特流信道的带宽,例如,针对下面示出的相同计时要求,48kHz采样频率使用均在16kHz上的3个比特流信道。因此,在使用交织比特流信道的情况下,一个比特流信道(在附图中示出为列)可以具有与多于一个设备相关联的比特流数据。在该上下文中,短语“与...相关联”意味着数据由端口生成或者由设备的端口使用,且这可以扩展到一个设备的多个端口或多于一个设备的多个端口。图28c和28d示出了在多个源/端口之间共享比特流帧信道(即,列)的示例。
可以通过观看图46a的表格的第3行中的示例来理解图46a和46b中的表格。在该情况下,总共存在具有比特流帧格式的四个比特流帧信道,其中,这些帧信道中的三个用于音频数据且帧信道之一用作控制信道。因此,用于控制数据的带宽是1/4=25%。实际采样率对于图46a和46b中所示示例是变化的。可以通过将输出采样频率与过采样率相乘来发现实际采样率,即,图46a中第一行的实际采样率将是16*48=768kHz。当来自∑Δ转换器的输出比特流在该采样率(768kHz)上时,输出采样率可以根据正在使用什么抽取滤波器而不同于16kHz。例如,如果抽取滤波器按因子48来抽取,则输出采样频率将是第一行所示的16kHZ。帧控制信道的控制数据也以16kHz来采样,但是也存在这些采样率不同的示例。图46a和46b中的所有示例利用了比特流帧格式,且在子帧中仅重复信道一次。在比特流模式下,将子帧定义为帧的具有从控制比特开始的比特并包括在下一个控制比特之前的后续比特的部分。图46b的行2所示的具有过采样比200/3的示例很好地适合具有19.20MHz系统频率的数字麦克风(由于过采样比接近64)。
针对图46a,行1和2中的示例具有两个比特流帧信道,且帧信道之一用于比特流数据信道,且另一帧信道用于控制信道。行3和4中的示例具有四个比特流帧信道,且三个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行5中的示例具有六个比特流帧信道,且五个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行6中的示例具有八个比特流帧信道,且七个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行7中的示例具有12个比特流帧信道,且11个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行8中的示例具有16个比特流帧信道,且15个帧信道用于比特流数据信道,且另一帧信道用于控制信道。如图46a的带宽列所示,控制信道的带宽根据比特流帧信道的数目而变化。
针对图46b,行1中的示例具有两个比特流帧信道,且帧信道之一用于比特流数据信道,且另一帧信道用于控制信道。行2中的示例具有三个比特流帧信道,且两个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行3中的示例具有四个比特流帧信道,且三个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行4和5中的示例具有六个比特流帧信道,且五个帧信道用于比特流数据信道,且另一帧信道用于控制信道。行6中的示例具有12个比特流帧信道,且11个帧信道用于比特流数据信道,且另一帧信道用于控制信道。如图46b的带宽列所示,控制信道的带宽根据比特流帧信道的数目而变化。
现在参见图47,其中示出了在混合字模式下工作时统一总线通信协议的实施例的总线频率、以及信道的数目和类型的示例组合的表格。该表格示出了不同采样率和不同带宽的组合(即,以不同的带宽来传输来自不同源的数据)。混合字模式对于以下情形是有用的:使用不同的采样频率,例如Dolby 5.1格式或具有用于混合的语音呼叫和音乐的场景,例如同时在8和48kHz上,或者如果不同字长度同时可用。当重复参数小于一时,使用数据同步比特(DS0和DS1)。图47的行1中的示例适合Dolby 5.1音频传输,且子帧长度320比特。其示出了等价于24kHz带宽的具有采样频率48kHz的5个音频信道(通常是左、右、中间、左后和右后)和等价于1.6kHz带宽的在3.2kHz上采样的一个信道(通常是低音炮)。重复值5将被编码为7(即,连续重复,直到使用DS0同步的帧结束为止)。这意味着存在具有在48kHz上的TDM字的五个信道,每个信道具有24比特解析度,且每个信道在640比特的单一长子帧中被重复五次。单一信道将具有24比特解析度以及9.6kHz采样频率。帧频率是9.6kHz/3,即3.2kHz。行二中的示例意味着存在48kHz上采样的两个信道和8kHz上采样的两个信道,且所有信道具有16比特解析度。行三中的示例意味着存在48kHz上采样的两个信道和8kHz上采样的三个信道,且所有信道具有16比特解析度。可以看到:通过改变向控制信道分配的带宽,可以在使用相同时钟频率时获得更多音频/数据信道。
现在参见图48a、48b和48c,其中示出了在比特流模式下工作且使用统一比特流帧格式时统一总线通信协议的实施例的总线频率、信道的数目和类型的示例组合的表格。
针对图48a,该组合在存在来自使用比特流数据信道的端口的输入数据以及要向使用字数据信道的端口提供输出数据时有用。例如,图48a中的格式可以在存在来自若干麦克风(即,比特流数据信道)的输入和针对两个或更多个扬声器的具有数字字数据格式的输出(即字数据信道)。在该情况下,一些比特流信道用于根据统一帧格式将数字字数据作为比特流数据来发送。该示例示出了将数据分组为10个比特流信道(即,10列)。第一列是由命令字占用的控制帧信道。接下来五列是由五个音频比特流占用的比特流帧信道,每个音频比特流在1.2MHz上采样,且如果过采样因子是50,则具有预期输出采样频率24kHz。最后四列是虚拟比特流帧信道,预期它们携带五个TDM数字字流,每个数字字流工作在48kHz上且具有20比特解析度。通过交织的4个虚拟帧信道来传输五个TDM信道(即,首先发送全部5个MSB,然后全部5个MSB-1,等等)。DS0或DS1比特可以用于同步。这可以通过对在比特流模式下具有不同解释的子组和重复字段进行编程来进行。重复字段将指示为TDM传输分配的比特流数目(即,在本示例中为四,编码为011)以及子组字段将指示使用的第一个比特流(当使用编号方案0~7时)。一般地,在一个比特流信道内传输TDM数据信道。然而,在至少一个实施例中,可以增加特殊情况,以处理在比特流模式下对TDM字的使用,其中,用于发送TDM字的帧信道的数目小于TDM数据信道的数目(例如,可以针对TDM字来改变VSPACING定义)。
针对图48b,行1中的示例具有四个比特流帧信道,且帧信道之一用于比特流数据信道,两个帧信道用作被转换为比特流数据信道的字数据信道的虚拟帧信道,以及另一个帧信道用于控制信道。行2中的示例具有八个比特流帧信道,且三个帧信道用于比特流信道数据,四个帧信道用于被转换为比特流数据的字数据信道的帧信道,以及另一个帧信道用作控制信道。行3中的示例具有八个比特流信道,且三个信道用于比特流信道数据,四个信道用作被转换为比特流数据的字数据的虚拟帧信道,以及另一个帧信道用作控制信道。在该情况下,两个比特流帧信道用于携带每个TDM数据信道。行4中的示例具有八个比特流帧信道,且四个帧信道用于比特流信道数据,三个帧信道用作被转换为比特流数据的字数据的虚拟帧信道,以及另一个帧信道用作控制信道。行5中的示例具有八个比特流帧信道,且四个帧信道用于比特流信道数据,三个帧信道用作被转换为比特流数据的字数据的虚拟帧信道,以及另一个帧信道用作控制信道。在该示例中,三个TDM数据信道被分布到三个比特流帧信道中。行6中的示例具有八个比特流帧信道,且五个帧信道用于比特流信道数据,两个帧信道用作被转换为比特流数据的字数据的虚拟帧信道,以及另一个帧信道用作控制信道。行8中的示例具有八个比特流帧信道,且六个帧信道用于比特流信道数据,一个帧信道用作被转换为比特流数据的字数据的虚拟帧信道,以及另一个帧信道用作控制信道。对于第3个和第5个示例,使用了数据同步比特。数据同步比特可以在多帧循环的开始时激活,其中,发射机和接收机都使用相同的小数计数器来获得小数流之间的同步。作为示例,小数计数器的比率可以是1/2,即数据在每隔一个帧中开始,且数据始自信道A。然后在下一个子帧中,继续输出数据就好像不存在帧边界一样。然后,在第三子帧中,该过程从头再次开始。所有这些由DS0比特来发起,DS0比特每隔一个帧重置小数计数器。在该场景下,小数计数器对0,1/2,1->0,1/2,1->0等进行计数。具有发射机的设备将控制DS0比特。
针对图48c,在行一的示例中,将帧格式分为八个比特流。一个比特流帧信道用于携带控制信息,三个比特流帧信道用于携带过采样信息(例如,三个数据比特流)以及四个剩余比特流帧信道用于携带具有在这些信道之间复用的TDM信息的五个字数据信道。在行二的示例中,一个比特流帧信道用于控制信息,三个比特流帧信道用于过采样数据(例如,三个数据比特流)以及剩余四个比特流帧信道用于携带均具有精度20比特的十个复用TDM(字数据)音频信道。在行三的示例中,一个比特流帧用于携带控制信息,五个比特流信道用于携带过采样数据(例如,五个数据比特流)以及剩余两个比特流帧信道用于携带五个复用TDM字数据信道。
应当注意:图45a至47c中的示例组合可以与不同类型的字数据一起使用,例如,音频字数据、视情况而定的具有字格式、比特流格式或统一比特流格式的仪表或传感器数据。
统一总线通信协议还可以支持各种数据格式。在至少一个实施例中,统一总线通信协议可以通过为具有这些不同格式的数据提供传输介质来支持四种不同数据格式:二进制字、比特流、串和浮点。在其他实施例中,可以支持这些数据格式的不同组合。
二进制字格式可以用于表示在字模式期间在总线64上发送的字数据。二进制编码可以使用二的补码形式来进行,且首先是MSB。在该情况下,可以将数字解释为已被缩放以具有最大数值值一。在图49a中示出了统一总线通信协议的实施例的用于以二进制字格式对N个比特编码的一般格式的示例。该数据格式与I2S和TDM编码直接兼容。
比特流编码格式可以用于表示在比特流模式期间在总线64上发送的过采样数据。过采样数据通常是作为来自∑Δ转换器的输出来导出的,例如(但不限于)来自数字麦克风的输出。某些D类放大器也支持过采样数据作为输入数据。过采样数据可以用原始形式来处理或可以稍后被抽取以获得基带数据。使用的过采样因子一般取决于系统要求。在图49b中示出了与移动电话系统的比特流编码格式一起工作良好的一些常见过采样因子的示例。
比特流编码格式不是非常不节约带宽的,且因此可以用于低时延或PCB线路,其中,带宽可以更高。例如,如果比特流格式用于头戴式耳机接口,则可以使用比48kHz更低的采样率,例如16kHz,其给出了在过采样比(OSR)64情况下的1.024MHz带宽要求。应当注意:7.056MHz是特殊频率,因为其可以在使用整数采样率转换的情况下同时支持44.1和48kHz采样率。从而,该频率可以支持最高的可能音频质量(尽管非整数上采样和混合可以导致瞬间失真)。按因子66.67进行抽取可以通过执行作为抽取过程一部分的按因子三来进行插值来实现。该配置可以用于19.200MHz时钟系统。
串编码格式使用ASCII格式且允许所有字符一个字节长。在示例实施例中,如果第一字符等于一,则串将之后跟随且以零终止。如果第一字节等于254,则接下来8个字节将指示串的长度。如果串具有无限长度,第一个字符将等于255。如果字符序列已结束,可以使用零。在图49c中示出了统一总线通信协议的实施例的用于串编码格式的可能组合的示例。
串编码格式既可以在主设备52从从设备54读取时使用,也可以在主设备52向从设备54写入时使用。在从设备54接收到该命令之后,串开始的定义来自信道的激活,且在X字之后的下一帧的开始处开始。主设备52不解释串,而仅仅传输这些串。如果以BCD格式对变量编码(即,二进制编码数字格式,例如“34”编码为“00110100”),则可以使用串格式。接收到具有BCD格式的数据的设备可以移除该前导码(preamble)。
在示例实施例中,浮点格式使用IEEE数值标准754-2008以描述浮点数的格式。当使用紧凑编码格式时,变量将是单精度的,而在一般编码格式下的精度将于编码中指定的精度相同。从端口读取的第一字节或向端口写入的第一字节可以是最高有效字。在至少一个实施例中,支持主设备52的驱动器可以被配置为对以下IEEE浮点格式进行编码和接收:binary32、binary64、decimal32和decimal64。
应当注意:在某些情况下,传输与用于总线64的时钟速率严格匹配的数据流有可能是不可能的。作为示例,可能必须通过48kHz连接来传输44.1kHz内容。如果将采样率同步到相同时钟源,则两个采样率之间的比(即,44.1/48)不是整数。然而,其是严格的小数(147/160)且通过总线64的传输可以在不对异步推送/拉取进行排序的情况下来控制。在至少一个实施例中,该类型的传输被称为小数流,且可以由主设备52来控制。小数流允许对上述场景的简单和高效的支持。DS0和DS1比特可以用于控制小数流且在所有操作期间被定义。
一种设置DS0比特的方式可以是使用相位累加器,并使用溢出进位(overflow carry)来控制DS0比特。作为示例,向DS0或DS1比特进行协议可以使用8比特小数相位累加器(ACC)来控制。小数相位累加器的工作原理是:通过向总相位φ添加有穷量的相位Δφ=2π(X/Y),以及无论何时φ大于2π,则从φ中减去2π并将SYNC(同步)标志设为高。在统一总线通信协议的至少一个实施例中,图50a所示算法可以用于实现该过程。然而,有可能修改该算法,使得如果首先计算量(2N-Y),则使用单一加法器。
作为示例,假定X=147,Y=160,N=8(这与48kHz信道上的44.1kHz数据流匹配)且存在8比特累加器。每个循环将值X加到累加器ACC,且当ACC值大于Y时,则从累加器ACC值中减去Y。在该示例场景下的计算如图50b所示。应当注意:加法是使用模256来示出的(针对8比特累加器)。在一些实施例中,为了一般性,可以使用16比特累加器。在其他实施例中,可以使用其他解析度,例如,将10比特用于一个变量且将6比特用于另一个变量。在一些情况下,可以通过使用被分配用于变量交换目的的比特来交换变量。
在图50c中示出了各种回放场景的X和Y的一些典型值的示例。如果可以使用特殊系统频率(例如,26.000或27.000MHz),则可以使用时钟分频器以降到1.00或2.00MHz,然后可以将其用作时间基准。这样,即使针对X和Y仅提供了8比特解析度,小数分频器依然可以支持各种频率。
本文描述的统一总线通信协议的各种实施例可以用在各种不同应用中。例如,统一总线通信协议可以用于方便芯片进行芯片通信,在图51a和51b中示出了其示例。统一总线通信协议还可以用于方便各种设备之间的通信,在图52a至52i中示出了其示例。
现在参见图51a,其中示出了具有显示器的控制系统220的示例实施例,其使用统一总线通信协议。控制系统220包括处理单元222、ADC 224、ADC 226、DAC 228、显示器230和总线232,将所有这些元件耦合在一起。处理单元222可以是处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)或本领域技术人员所知道的某种其他处理电路。在该示例中,总线232具有双线实现,其中,一根线用于发送时钟信号,且另一根线用于发送数据、同步和命令数据。在该示例中,处理单元222担当主设备,且从设备是ADC 224、ADC 226、DAC 228和显示器230。
现在参见图51b,其中示出了使用统一总线通信协议的移动电话系统250的示例实施例。移动电话系统250可以是例如蜂窝电话或智能电话。移动电话系统250包括基带处理器252、编解码器(CODEC)254、D类放大器256、容性传感器258、IR传感器260、D类放大器262、FM无线电264、蓝牙模块266、四个麦克风268至274和两个总线276和278。总线276用于耦合元件252至266,且总线278用于耦合元件252、254和268至274。在该示例中,总线276和278如前所述使用双线总线实施例来实现。此外,在该示例中,基带处理器252担当主设备,且其它元件256至274担当从设备。可以存在使用多于一个总线的应用,以使得系统更节约能量,因为当很多设备耦合到相同总线时,容性损耗将增加且较不节约能量。此外,不同的总线可以具有不同的时钟速度,且较低的时钟速度更节约能量。统一总线通信协议的另一方面是:其可以用在将低成本数字附件连接到移动电话系统250的总线上。
现在参见图52a,其中示出了使用统一总线通信协议的房屋安全系统300的示例实施例。房屋安全系统300包括控制器302、无线电调制解调器304、电话线306、煤气传感器308、二氧化碳(CO2)传感器310、开关312至318以及总线320。开关312至318均连接到从设备,以给出逻辑零输出或逻辑一输出,这取决于开关的状态(例如,窗户或大门开启或关闭)。即使将从设备包括有每个传感器将是小的附加成本,这将是对较低安装成本的偏离,可能极大地超过从设备的增加成本。控制器302可以由本文描述的任何处理单元来实现。总线320可以实现为单线实施例,其中,在相同总线线路上发送时钟、数据、命令和同步信息。总线320将控制器302耦合到元件308至318。控制器302担当主设备且元件308至318担当从设备。无线电调制解调器304和电话线306可以用于与监管中心站或家庭所有者进行通信,监管中心站或家庭业主可以直接检查线路的状态并在警告来临时向恰当的机构报告(例如,当特定状况发生时,电话通知业主、消防队、警察局等等)。在电话线路306关闭或故障时,无线电调制解调器304可以用作备份。
现在参见图52b,其中示出了使用统一总线通信协议的家庭娱乐系统350的示例实施例。家庭娱乐系统350包括DVD播放器352、功放354、扬声器356至362和总线364。总线364将DVD播放器352耦合到放大器354。总线364可以实现为例如标准数字电缆中的单线。在该示例中,DVD播放器352担当主设备且功放354连同四个扬声器356至362的四个音频信道担当从设备。
现在参见图52c,其中示出了使用统一总线通信协议的家庭娱乐系统400的另一示例实施例。家庭娱乐系统400包括:DVD播放器402、HD电视机404、扬声器406至412和总线414。总线414将DVD播放器402耦合至HD TV 404。总线414可以实现为例如标准数字电缆中的单线。在该示例中,DVD播放器402担当主设备且HD TV 404连同扬声器406至412的四个音频信道担当从设备。
现在参见图52d,其中示出了使用统一总线通信协议的仪表系统450的示例实施例。仪表系统450包括:万用表452、传感器454和耦合这两个元件的总线456。总线456可以实现为例如标准数字电缆中的单线。在该示例中,万用表452担当主设备且传感器454担当从设备。
现在参见图52e,其中示出了可以使用统一总线通信协议进行通信的电子钥匙500的示例实施例。在该情况下,电子钥匙500具有可以连接到使用统一总线通信协议的总线(未示出)的两个端子502和504,使得可以从电子钥匙500中读取ID。为了更高的机械鲁棒性,在备选实施例中,可以将端子实现在电子钥匙500的相对侧上。电子钥匙500担当从设备。
现在参见图52f,其中示出了可以使用统一总线通信协议进行通信的存储棒550的示例实施例。存储棒550具有三个端子:正端子552、负端子554和数据端子556。数据端子556可以连接到使用统一总线通信协议的总线(未示出)。存储棒550担当从设备。
现在参见图52g,其中示出了可以使用统一总线通信协议进行通信的订户身份模块(SIM)卡600的示例实施例。SIM卡600具有芯片602和端子604至608。如果可以将电流消耗保持低于几个mA,SIM卡600可以实现有两个端子。备选地,为了更高的功率要求,SIM卡600可以使用三个端子来实现,如图52g所示,在该情况下,端子604至608之一用于功率,且端子604至608中另外两个用于传输信息。
现在参见图52h,其中示出了可以使用统一总线通信协议进行通信的加密信用卡的示例实施例。加密信用卡650具有芯片652和三个端子654至658。对统一总线通信协议的使用允许将加密信用卡350实现有更少的端子。端子654至658之一可以用于功率,且端子654至658中另外两个可以用于传输信息。如果信用卡芯片652的功耗充分地(例如,低于3mA),则可以不适用用于传输功率的端子,且可以代之以使用单线物理层。
在其他实施例中,本文描述的统一总线通信协议可以用于无线通信。在一个实施例中,信用卡可以包括基于感应的电路,用于无线信息传输,例如使用位于13.8MHz的载波,然后通过加载或不加载RF场来处理传输。然后主设备可以通过改变磁场与从设备通信,同时从设备可以通过对场的不同加载来信号通知。本文描述的统一总线通信协议的各种实施例的无线版本也可以用于其他应用。
读卡器用于处理交易,且因此数据安全用于确保防止未授权复制和盗窃。统一总线通信协议的一个方面是通过使用数字传输数据的加密来实现这些环境中的安全解决方案。这将禁止复制来自读卡器的模拟输出信号的可能性,因为模拟信号不直接可用,且不可能在没有恰当加密密钥的情况下对数字编码信号进行解密。
现在参见图52i,其中示出了使用统一总线通信协议的心率监视器系统700的示例实施例。心率监视系统700包括监视设备702、心率传感器704(例如,指夹传感器)和将它们耦合在一起的总线706。总线706可以使用单线来实现。在该示例中,监视设备702担当主设备,且传感器704担当从设备。在一个实施例中,监视设备702可以是运行特殊化软件应用的智能电话,该特殊化软件应用基于由指夹传感器704测量到的信息来计算心率信息。在备选实施例中,可以使用特殊化硬件和固件来实现监视设备702。在备选实施例中,其他类型传感器可以用于测量用于确定心率信息的生理信息。
可以使用统一总线通信协议的设备的其它示例包括电池监视器、具有显示器的头戴式耳机、具有用于噪声消除的多个麦克风的头戴式耳机、具有立体声录制能力的头戴式耳机、报告灵敏度和/或调谐的头戴式耳机、具有完全数字接口的头戴式耳机、低成本传感器接口等。在电池监视器的情况下,智能电池通常具有3个端子:正电压端子、负电压端子和允许从智能电池读取电池ID和其它信息的数据线。因此,统一总线通信协议可以用于与智能电池通信,并例如监视诸如温度之类的电池参数。
现在参见图53,其中示出了根据统一总线通信协议的一个或多个实施例来操作总线64的方法800的示例实施例。
在802,统一总线通信协议由主设备52激活。这可以发生在上电事件、重置事件之后,或者由某个其他事件(其后,例如控制器或状态机将开始对主设备52编程)来发起。在802,主设备52使用的各种寄存器被初始化和设置为正确值,使得其可以使用统一总线通信协议通过总线64进行通信。这可以由另一设备(例如,控制器)来进行,或者主设备52可以从例如存储器中访问这些设置。
在804,配置操作模式。该操作模式包括针对用于通过总线进行通信的帧格式来选择各种参数。例如,此时,主设备52可以在使用字模式或比特流模式之间选择。
在806,然后主设备52可以配置来自字帧格式、比特流帧格式或统一比特流帧格式的用于所选模式的帧格式。此时,在至少一些实施例中,主设备52还可以在各种堆组寄存器中保存通信的不同数据模式,使得主设备52可以在操作期间在通信的不同数据模式之间切换,而不引起数据发送中的小错误。不同数据模式可以指定所选帧格式的各种参数,例如(但不限于)以下一项或多项的组合:不同的采样率、不同的信道选择、不同的端口选择、针对给定端口的各种所选信道的帧信道的不同分配、在帧信道分配中的不同端口信道子组、在帧信道分配中的不同端口信道重复、以及将来自不同信道的数据复用到公共帧信道中。在一些实施例中,主设备52可以通过启用快速安定振荡器在完成低功率模式之后启用快速启动,以更好地支持UART设备。
在808,想要通过总线64通信的从设备与主设备52同步。这是由从设备通过监视总线64上S字数据的发送的活动来进行的。在字模式下,S字的比特在总线64上连续发送。在比特流模式下,S字的比特不连续发送,而是与来自其它帧信道的比特进行时间复用。然而,在这两种情况下,在至少一个实施例中,在同步过程期间从设备54识别S字以及确定帧长度和帧结构。尽管作为同步过程的一部分,帧结构由从设备54来识别,如果存在从设备54从一个帧格式立刻变为另一个帧格式而不丢失同步(即,锁定)的时间且由此允许立刻改变帧格式,可以包括从设备54内的寄存器以指示下一个帧格式将是什么。该信息可以被包含在命令分隔寄存器中,且可以在同步之后由主设备52在从设备54中进行编程。在字模式和比特流模式下,从设备54都可以通过监视总线64上的活动以确定S字的比特是连续发送还是与其他数据比特进行时间复用,来尝试同步。
在至少一些实施例中,从设备54通过以下方式来监视总线64上的活动:搜索给定S字的恒定同步部分,注意S字的动态同步部分,以及使用确定性方法来计算从产生S字的动态同步部分开始的下一个S字的动态同步部分。在至少一个实施例中,确定性方法可以是例如(但不限于)CRC计数器。CRC计数器使用规定,使得通常不遭遇值零(在该情况下,其将卡在零)。这可以通过对该值进行选通并在值零出现时将CRC计数器设为另一个值来进行。在另一实施例中,CRC字可以作为来自具有逻辑门的二进制计数器的输出来生成,其被编码以生成恰当的输出模式。在至少一个实施例中,不同的恒定部分可以用于字模式和比特流模式的S字。在至少一个实施例中,当使用统一比特流帧格式时,还可以将不同的恒定部分用于S字。
为了使得同步过程更鲁棒,在至少一个实施例中,从设备54可以搜索S字的恒定部分,注意S字的动态部分,以及计算下一个S字的动态部分若干次。可以将这三个步骤称为同步检查过程。重复越多次该同步检查过程,同步过程将越鲁棒,因为从设备54更有可能正确地检测到正在使用字模式还是比特流模式,并于主设备52同步,而不是同步到由连接到总线64的其它设备(例如,端口)生成的伪同步模式。然而,在增加同步检查过程的重复和减少同步时间之间存在折中。在本描述中稍后更详细地讨论用于实现同步的各种方法。
在810,主设备52检测是插入还是移除从设备,换言之,从设备是正在尝试与总线64连接还是与总线64断开连接。如果从设备到总线64的物理连接在总线64已开始操作之后发生,则这被称为热插入。即使不施加功率,这对于本文描述的至少一种统一总线通信协议是可能的,只要从设备52要么在其连接到总线64之前接收功率,要么其不以其它方式影响总线64。此外,当总线64活跃时总线64允许设备被物理移除,且这被称为热移除。在至少一个实施例中,这可以由主设备52通过发出PING命令来执行。在发出了PING命令之后,已与主设备52同步且被锁定到总线64的每个从设备可以在通过总线64发送X和Y命令字时通过在特定时隙中发送数据来发送其从状态(作为示例,参见图9a、9b和10以及相关联描述)。然后主设备52可以读取X和Y命令字中的从状态字段的值,以确定哪些从设备尝试连接到总线62。在实施例中,这可以在从设备写入值“01”、“10”或“11”作为从状态时来确定。如果从设备与总线断开连接,其占用的地址变为可用,且可以要么用于另一从设备,要么保持为相同从设备预留,直到其变得与主设备52和总线64再次同步为止。
在至少一个实施例中,可以将中断比特(IRQ)写入与向主设备52通知从设备之一要求注意的S字相关联的时隙,在该点上,主设备52可以发出PING命令并确定尝试连接到总线64的从设备的状态。在至少一个实施例中,如果从设备的状态以特定方式改变,则可以自动发出中断比特(IRQ)。
在812,主设备52向尝试连接到总线64并已与主设备52同步的从设备指派地址。在实施例中,这些从设备将具有设备地址零,且主设备52通过发出请求ID功能(作为示例,参见图11a和关联描述)来检测这些从设备。此刻尚未锁定到总线64上的从设备将不被激活,且将不响应请求ID功能。由于在上电事件或重置事件之后多个从设备可以具有设备地址零,在至少一个实施例中,之后主设备52可以执行在本描述中稍早描述的动态地址分配方法,以向这些从设备指派不同地址。因此,与其他总线通信协议(例如,I2C)不同,在使用统一总线通信协议的情况下,从设备的缺省地址不一定是固定的。这使得使用相对(例如,四个比特)地址空间而不具有设备地址冲突的问题成为可能,该设备地址冲突的问题在I2C中经常遇到(其中,使用7个比特)。为了解决该问题,I2C设备的设备制造商经常包括用于备选地址的额外管脚;然而这增加了额外成本和空间,或者产生了相同芯片的编程变型,由此导致逻辑问题。这可以通过使用具有本文描述的统一总线通信协议的各种实施例的动态地址分配方法来避免。
在814,主设备52配置与总线64刚好同步并耦合且已被给与设备地址的从设备。该配置可以包括各种操作,例如,端口编程、以及根据所选帧格式来指派用于来自所选数据信道的数据的时隙。一般而言,该配置涉及选择同步的至少一个从设备的至少一个端口的数据信道用于数据发送。
在至少一个实施例中,主设备52指示从设备54在其端口上编程。这可以包括将接收针对第一端口的输入数据的数据信道分组在一起,以及将向第二端口发送输出数据的数据信道分组在一起。在至少一个实施例中,还可以进行该分组以使得给定端口的信道具有以相同频率采样的数据。主设备52还可以向针对从设备54定义的各种端口指派号码。
在至少一个实施例中,即使可以向端口指派若干数据信道,可以不使用所有数据信道。因此,主设备52可以选择端口的数据信道中针对数据发送或数据接收将是活跃的一部分。在至少一个实施例中,这可以使用信道选择字段(作为示例,参见图16和关联描述)来进行。例如,具有8个数据信道的端口可以具有被设为“00001100”的信道选择字段,在该情况下,选择数据信道2和3为活跃数据信道(如果数据信道编号在7开始)。
在至少一个实施例中,主设备52于是基于被选择与统一总线通信协议一起使用的帧格式向从设备指示对于编程端口来说数据放在哪里(即,使用哪些时隙)。在至少一个实施例中,在端口将携带比特流数据还是TDM数据方面定义端口,且不同端口用于不同数据格式目的。
在字模式的情况下,可以指定两个命令字之间的最小距离,以及在命令字之后首先放置数据的时隙。在至少一个实施例中,这可以由开始字段来指定。还指定每个数据信道的数据宽度,在至少一个实施例中,这可以通过使用长度字段来进行。
在字模式下,在至少一个实施例中,有可能微调数据传输,这在针对一个或多个从设备的一个或多个端口的不同数据信道同时使用多个采样率时是有益且高效的。例如,在至少一个实施例中,在子帧的数据信道的数据之间可以存在间隙(作为示例,参见图21和23及关联描述)。在至少一个实施例中,可以存在子帧中的不同数据信道的各种分组(作为示例,参见图21、23和24及关联描述)。在至少一个实施例中,可以存在子帧中的不同数据信道的分组的重复(作为示例,参见图21、23和24及关联描述)。在至少一个实施例中,在子帧中仅可以重复单一数据信道。在至少一个实施例中,可以通过使用重复、子组和跳过字段来实现子帧中的数据信道的这些不同配置。还可以存在以下实施例:其中,可以存在包括这些特征中至少两个特征或全部特征在内的这些特征的各种组合。
在字模式下,还有可能高效地支持异步数据传输。在至少一个实施例中,这可以通过在用于该数据发送的第一帧中添加来自数据信道的两个比特在先数据来实现。比特之一可以用于指示发送设备是否有要发送的有效的新数据,且比特之一可以用于指示接收设备是否已接收到发送的新数据。
在字模式下,在至少一个实施例中,还有可能支持具有小数本质的数据流,例如在通过48kHz路径来传输以44.1kHz采样的数据时。在至少一个实施例中,可以通过以下方式来支持小数数据流:在主设备52中使用相位加法器和位于X命令字中的比特,以指示在若干帧上的数据传输。
在比特流模式的情况下,可以将类似信息指定为针对字模式进行的,尽管由于比特流模式下使用的不同帧格式,这以稍微不同的方式来进行。例如,可以在使用比特流帧格式和统一比特流帧格式之间进行区分。在这两种情况下,可以指定两个控制比特之间的最小距离以及帧信道的数目、帧信道的长度、向帧信道分配数据信道、以及分配作为控制信道的帧信道。每个帧信道的数据宽度是一比特。
在统一比特流帧格式中,至少一个帧信道被分配为虚拟帧信道,其用于以一次一个比特的方式发送数字字数据。这允许可以同时支持比特流数据信道和字数据信道的公共帧格式。因此,可以在比特流模式下支持TDM信令或TDM数据传输。在实施例中,这可以通过使用比特流模式下传输的TDM字(TDM WORDS TRANSFERRED INBITSTREAM MODE)字段来实现。
在至少一个实施例中,可以将既用于比特流帧格式也用于统一帧格式的至少一个帧信道分配为复用帧信道,其中,将来自不同数据信道的比特复用在公共帧信道中,可以将该公共帧信道称为复用帧信道(图28c和28d以及关联描述部分提供了示例)。这可以在向不同帧信道分配的数据信道使用不同采样率的情况下进行,使得可以将具有较低采样率的数据信道在复用帧信道中交织(在复用帧信道的垂直方向上)。
在至少一个实施例中,对于比特流帧格式和统一帧格式,可以改变向数据信道分配的帧信道的数目,以改变在数据发送期间由控制帧信道以及一个或多个数据信道使用的带宽。
在至少一个实施例中,对于比特流帧格式和统一帧格式,都有可能微调数据的传输,这在针对信道数据同时使用多个采样率时是有益且高效的。例如,在至少一个实施例中,在向帧中的数据信道分配的帧信道之间可以存在间隙(作为示例,参见图28b以及关联描述)。在至少一个实施例中,可以存在向帧中不同数据信道分配的各种帧信道分组(作为示例,参见图26b和28d以及关联描述)。在至少一个实施例中,可以存在向帧中的不同数据信道组分配的帧信道的重复(作为示例,参见图26b和28b以及关联描述)。在至少一个实施例中,可以通过使用HSTART、VSTART、HSPACING和VSPACING字段来实现向数据信道分配帧信道的这些不同配置和分配。
在至少一个实施例中,有可能以类似于之前针对字模式的方式高效支持比特流模式下的异步数据传输。如果所使用的信道/端口支持小数流,则这是可能的。例如,这种信道可以用于在3.072MHz信道中传输44.1kHzx64比特流数据。
再次参见图53,在816处,激活数据的至少一个发射机和数据的至少一个接收机上的所选数据信道。在至少一个实施例中,这可以通过写入激活字段来进行(作为示例,参见图16以及关联描述)。所选数据信道可以是来自一个或多个从设备的一个或多个端口的一个或多个数据信道。
在818,通过总线64来传输与所选数据信道相关联的数据。对于作为输入数据信道的所选数据信道,通过总线64从对应从设备接收来自这些选择的数据信道的数据。对于作为输出数据信道的所选数据信道,通过总线64向对应从设备发送这些选择的数据信道的数据。一般而言,818处的数据传输包括在耦合到总线64的至少两个设备之间发送数据,其中,发送的数据包括数值数据、控制数据和时钟数据中的至少一项。
在820,在不需要向给定所选数据信道发送这些数据或从给定所选数据信道接收这些数据的情况下,可以去激活所选择的数据信道中的至少一个。在至少一个实施例中,可以通过对对应端口的激活字段进行去激活来去激活所选信道。
然后方法800回到804,其中,可以确定是否可能必须改变操作模式或帧格式。例如,可以存在由于改变了数据信道的某些参数(例如,采样率)而在运行中改变帧格式的实例。在其他场景下,数据的发射机和接收机可以改变。例如,在音频应用中,在一个场景中,音频数据被定向至头戴式听筒插孔,而在另一场景中,它们被定向至接收机、扬声器或组合式接收机/扬声器。在一些场景中,增益改变可以同时发生在多个设备中,以允许某种混音情形,例如,从一个信号源逐渐变为另一信号源。此时,方法800从动作806至820循环。在实施例中,该循环可以重复进行,直到去激活统一总线通信协议。例如,如果外部事件关闭了特定应用(例如,音频部分,例如电话呼叫的结束),在该情况下设备将被设为低功率模式,且时钟设为空闲(例如,MCLKD=0000),则该循环可以终止。
在至少一个实施例中,主设备52的各个寄存器可以如针对方法800中从设备所解释的那样来配置。
本文所述的统一总线通信协议的至少一个实施例提供了对以下至少一项的公共接口支持:比特流数据、数字字数据(例如,用于连接到I2S或SPDIF)、TDM数据和控制数据、以及I2C和I2S能力。因此,本文描述的统一总线通信协议的各种实施例可以用作各种标准接口之间的数字集线器,或者在一些情况下,本文描述的统一总线通信协议的至少一个实施例可以用于替换SLIMbus、McBSP、McPDM和MISO总线通信协议中的至少一项。
如在本文描述的统一总线通信协议的至少一个实施例中做的那样,处理具有比特流数据的控制数据的能力是有益的,因为在传统比特流总线通信协议的情况下,尚未对用于比特流数据的控制信息的传输的标准方法达成一致。此外,传统控制方法导致了对音频数据的扰动,其在一些情况下听起来像是咔哒声。此外,在通过总线发送多于两个比特流数据信道时,传统比特流接口要求更多的端子。传统上,这可以要么通过增加更多数据线来实现(每个数据线将信道数目增加二),要么通过增加专用帧同步端子并复用比特流信道,例如如McPDM接口中实现的一样。然而,在统一总线通信协议中并不是这种情况,因为可以将复用比特流帧信道用于处理多个比特流数据信道的数据,且没有额外的端子用于同步。
本文描述的统一总线通信协议的至少一个实施例的方面是对具有低时延的比特流数据与控制数据的同时等时传输的支持以及对异步数据流的支持。例如,在比特流模式下实现的低时延允许各种应用,包括波束成形、主动噪声消除、临近感测、泄漏补偿、一般控制操作或其他低时延应用。
还应当注意到:在本文描述的统一总线通信协议的至少一个实施例中,可以存在不支持协议的所有特征的至少一个从设备。这是由统一总线通信协议通过不要求从设备执行它们不支持的功能来处理的。
本文描述的统一总线通信协议的至少一个实施例的方面是在从设备中使用选通时钟,其实现了对多个比特流数据信道的支持,而无需增加内部功耗(即,功耗与信道数目无关)。在该情况下,除了当命令数据可用时以及当从设备针对为其分配的专用空间来输入或输出数据时,从设备可以禁用其内部时钟。这意味着:即使比特流数目增加,内部计时频率将是相同的,且可以是能够支持该特定帧结构的小值。从设备的可能必须以完全系统时钟运行的部分将是从设备检查比特流同步的那个很小部分。然而,外部切换损耗将随着更高的系统时钟而增加。
本文描述的统一总线通信协议的至少一个实施例的方面是对用于以下至少一项的广泛类别的帧结构的支持:更高效的数据封装、更好的时钟支持、以及在带宽方面更灵活。例如,可以根据应用和正在处理的数据类型来使用字帧格式、比特流帧格式或统一帧格式。在至少一些实施例中,在比特流帧格式和统一帧格式下,可以在帧信道中以各种方式来组合比特流数据信道,用于更好的数据发送和带宽效率。在至少一些实施例中,统一比特流格式可以用于使用比特流数据信道来发送字数据信道,用于更好的数据发送和带宽效率。在至少一些实施例中,在比特流模式下,可以用各种方式来组合来自各个信道的数据,例如,分组在一起并重复,以增强数据发送和带宽效率。
本文描述的统一总线通信协议的至少一个实施例的方面是支持在两种帧格式(即,数据模式)之间的瞬时改变(例如,运行中改变),因为协议可以允许在该改变之前提前准备从设备,这将避免数据中的小错误。这可以通过将多于一个寄存器用于跟踪各种数据模式来实现。例如,两种不同数据模式可以使用不同的时钟频率或帧格式。
本文描述的统一总线通信协议的至少一个实施例的方面是支持将从设备热插入总线64或将从设备从总线64中热移除,而不使用握手过程。在总线64开始操作之后,从设备可以连接到总线64。在该情况下,总线64将不崩溃,且主设备52将从从设备接收对其处于地址零且需要被注意以连接到总线64并同步到主设备52的通知。类似的,可以在不向主设备52提前通知的情况下,将从设备从总线64上物理移除。从设备可以改变其状态等级,以指示其与总线64断开连接,然后状态等级的改变将被传输到主设备52。
本文描述的统一总线通信协议的至少一个实施例的方面是通过实现至少一个以下特征来提供针对内部或外部错误的错误处理。例如,可以连续监视从状态,以检测同步丢失或其他问题,例如通过监视来自从设备的紧急请求,在至少一个实施例中,这可以用S字中的比特来表示。可以支持的另一特征是所有读取、写入和功能操作可以包括奇偶性检查。可以支持的另一特征是所有读取、写入和功能操作可以包括来自接收到该操作的数据和/或指令的设备的应答,以确认该操作在没有任何错误的情况下发生。可以支持的另一特征是发现连接到总线的设备崩溃或无意写入非法数据时隙,这可以通过如本文所述检查各种寄存器比特来检测到。例如,在一些错误中,从设备本身将回退,且总线64将在几个帧内重启(例如,自愈错误处理)。因此,与I2C总线通信协议不同,使用统一总线通信协议的总线64不能无限期的崩溃。
本具体实施方式的下一节现在将讨论将从设备同步到根据统一总线通信协议来通信的主设备或总线、字帧格式或比特流帧格式的话题。
在若干传统总线通信协议中,用于在总线上发送数据的帧格式的帧长度是固定的,且停留在相同值,以便于同步。例如,SPDIF/TOSLINK、AC-97和SLIMbus总线通信协议均使用固定帧长度。因此,在使用这些协议通过有限数目的线来发送音频数据时,使用固定帧长度使得难以高效的支持特定时钟频率且采样率。在这些特定时钟频率和采样率上的操作因此导致功耗增加和带宽消耗增加。例如,SLIMbus协议具有有限的高效支持作为在电信应用中使用的标准频率的频率19.2MHz的能力。此外,难以使用固定帧长度且通过不适合该帧格式的总线来异步发送任何数据。该场景将涉及额外的带宽、额外的缓冲区和额外的功耗。有可能在一些实例中使用异步采样率,但是这要求额外的硅面积和功耗,并导致音频应用的音频质量下降。
存在针对帧格式使用可变帧长度的一些传统总线通信协议,例如I2S、McBSP、McPDM和类似协议。然而,这些协议要求将单独的线或总线线路用于总线,以发送用于同步目的的帧同步信号。这要求额外的硬件成本和额外的空间,且仅可以用在有可能增加额外线的这些情形中。此外,它们不适合通过无线媒体或两个功率端子进行的数据发送,例如,在充电器的情况下。
在一些情况下,可能的解决方案是使用特殊的明确定义的启动序列,其中,所有从设备在启动时连接到总线,以接收帧长度和帧格式信息,使得它们可以通过总线通信。然而,该传统方案与可以与总线动态连接并动态断开连接的从设备不兼容,这也被称为设备的热插入(即,在总线已激活之后的稍后时间从设备连接到总线)和设备的热移除(即,在总线去激活之前从设备断开连接)。此外,在从设备故障或总线故障的情况下,在使用该传统方案的情况下,不存在让从设备与总线再次重新同步的方式,除非总线被去激活然后重新激活,以运行特殊启动序列。最终,基于环形的总线结构容易出现在发生故障的单一设备之后的所有设备的总体故障,且对于基于环形的结构,所有设备在总线启动之前连接。
此外,当由于成本、空间和功率原因将帧同步信号嵌入到比特流数据中时,不存在可以同步到复用比特流序列的传统总线同步算法。复用比特流对于主动噪声消除、波束成形和低时延应用是有用的,同时降低了用于总线的线或线路的数目。独有的传统解决方案是添加用于帧同步信号的额外线,这增加了成本、面积和功耗。除此之外,这些传统方法要求附加线用于重置、控制和设备监管以及支持逻辑。在帧长度和帧格式本身在操作期间都可以变化且这些参数在同步过程开始时未知的情况下,在降低用于总线的线数的同时对同步的发出在正在使用多格式或同意总线通信协议时甚至是更复杂的问题。
现在将描述使用如本文描述的统一总线通信协议时可以用于将从设备同步到总线64的通用同步方法的各种示例实施例,其中,帧长度、帧格式和帧类型可以在操作期间变化,且在同步过程开始时未知。例如,帧格式可以是字帧格式(即,在字模式下)、比特流帧格式或统一比特流帧格式(即,都在比特流模式下)。在另一方面中,本文描述的通用同步方法的各种示例实施例中的至少一个支持减少用于总线的总线线路或总线线。在本文的通用同步方法的各种示例实施例的描述期间,其它方面将变得显而易见。
一般而言,本文描述的通用同步方法的各种示例实施例涉及在总线64上的发送数据中搜索至少一个同步模式。一旦从设备54发现了同步模式,其在总线64上与主设备52通信,然后根据正在由统一总线通信协议使用的帧格式和操作模式被配置为用于操作。存在用于找到同步模式的各种备选方案,如下面更详细描述的。在至少一些情况下,可以由从设备54的同步引擎来实现通用同步方法的各种示例实施例。如前所述,可以使用处理器、状态机或其它专用电路来实现同步引擎,这取决于哪一种更适合手头的特定应用。
在本文描述的通用同步方法的至少一个实施例中,搜索同步模式包括搜索S字的恒定同步符号或恒定同步部分。同步模式的比特可以通过总线64以连续方式发送,如在字模式下一样,或者可以在于其他数据比特复用或交织的同时用一次一个比特的方式发送,如在比特流模式下一样。
在本文描述的通用同步方法的至少一个实施例中,可以在搜索同步模式之前假定两种操作模式之一,例如字模式。如果同步模式没有被定位在帧的最大允许长度内,则可以假定另一操作模式,且再一次搜索同步模式。如果同步模式没有被定位,则可以再次假定另一种操作模式,且再次搜索同步模式。这种在不同模式之间来回交替的过程可以直到实现同步(即,锁定)为止。基于不同模式在搜索之间的切换导致了如下面更详细描述的更鲁棒的搜索过程。
应当注意到:如本文所使用的以及根据上下文,操作“假定(assume)”或“假定(assuming)”不意味着如人类可能做的那样采用精神上的帧。而是,操作“假定”可以指代如机器可以做的那样操作或表现或者尝试或试图操作或表现。诸如“假定操作模式”之类的短语可以例如指代根据操作的协议或惯例或标准或方法来操作或表现,而不一定首先验证或证实特定事实或功能或可以与该操作或行为相关的任何其它条件。在该上下文中,“假定第一操作模式”用通俗的话说可以被视为就好像第一操作模式对于实现结果而言有效、实用一样来操作,而在实际中可能发现这是不正确的。因此,当将方法的特定动作描述为假定特定参数的特定值或假定特定条件时,其一般意味着将特定参数或特定条件的初始值选择为有效。取决于特定实施例,然后可以检查该选择的值以查看其是否正确,且如果不正确,则可以采取另一动作,例如选择另一值。
在本文描述的通用同步方法的至少一个实施例中,可以使用并行实现,其中,一个实现假定操作模式是字模式,且另一个实现假定操作模式是比特流模式。然后各实现在假定的操作模式下同时搜索同步模式,直到实现同步为止。在该情况下,当针对给定实现同步模式未被定位,则可以假定相同模式且再次执行搜索。再一次,这导致如下面更详细描述的更鲁棒的搜索过程。
在本文描述的通用同步方法的至少一个实施例中,一旦已定位了同步模式的第一实例,则将针对同步模式的下一实例进行新的搜索,以确定正在使用的帧长度。在一些实施例中,这可以进行若干次,以验证所确定的帧长度正确。一旦确定了帧长度,则后续搜索将使用所确定的帧长度来搜索同步模式。应当注意到:在至少一个实施例中,可以在总线64上的数据的每个帧期间发送同步模式。
在本文描述的通用同步方法的至少一个实施例中,为了减少主设备52和从设备54之间的伪同步的可能性,同步模式可以具有恒定同步部分和动态同步部分。确定性方法可以用于生成动态同步部分,使得动态同步部分将在两个连续同步模式之间不同,例如,在总线64上发送的两个连续S字的动态部分之间。第一次定位到恒定同步部分时,读取对应的当前动态同步部分(即,当前动态同步部分)。然后确定性方法用于基于当前动态同步部分来计算下一个预期动态同步部分。下一次定位到恒定同步部分时,读取对应动态同步部分,并将其与曾计算出的下一个预期动态同步部分进行比较,以验证真正的同步模式曾被定位,作为假定为伪同步模式。由于与恒定同步部分和动态同步部分都匹配的伪同步模式的概率低于刚好搜索恒定同步部分,因此大多数伪同步模式在该情况下将被忽略。该搜索过程可以重复一次或多次,以进一步降低伪同步(即,将模式识别为有效同步模式,然而实际上并不是有效同步模式)的可能性,以及正确确定帧长度,这也增加了该通用同步方法的鲁棒性。在至少一些实施例中,用于生成动态同步部分的确定性方法可以是循环冗余校验(CRC)计数器或生成器。
在至少一个实施例中,可以将基于来自总线的总线业务或从某个其它源获得的随机量可以用于在同步过程期间进行判定。在初始同步期间,总线上与同步符号模式相匹配的第一数据是否真的是帧的开始是未知的。因此,当CRC校验失败时,其是对表示帧的开始的恒定同步部分的第一次匹配还是第二次匹配是未知的,或者这些匹配均不表示帧的开始是未知的。为了减少该模糊性,在初始同步过程期间可以使用随机成分,以随机尝试不同的开始位置,以帮助减少以下情况发生的可能性:同步方法在伪同步模式和真同步模式之间连续切换,且在实现同步(即,锁定)时有问题。这可以发生在例如以下情况中:始终存在具有与恒定同步部分相匹配的数据业务的一个或多个信道。
在本文描述的通用同步方法的至少一个实施例中,为了进一步减少同步到伪同步模式的可能性,一旦在同步过程中实现了同步或之后(即,在已发现若干次真同步模式之后),所确定的帧长度可以用于搜索其他同步模式。由于连续同步模式之间的距离是所确定的帧长度减去同步模式的长度,可以将在小于该距离上发现的同步模式视为是伪同步模式并将其排除。
在本文描述的通用同步方法的至少一个实施例中,可以在搜索同步模式中使用随机成分,以增强在使用与恒定同步符号相匹配的静态数据总线业务的条件下的同步可能性。如果由于与正在搜索的同步模式接近匹配的随机总线业务导致同步错误出现,对随机成分的使用是有益的。
在本文描述的同步方法的至少一个实施例中,通用同步方法的随机成分可以包括读取特定时间段上的总线业务的奇偶性并将该奇偶性信息用于辅助确定当前定位的同步模式是有效/真同步模式还是伪同步模式。该奇偶性信息可以是随机的,只要存在连接到总线64并向总线64提供数据的物理传感器,例如麦克风、温度传感器、压力传感器等。在其它实施例中,利用来自总线业务的输入和CRC生成器的操作的过去历史的CRC生成器可以用于生成随机成分。例如,在至少一个实施例中,可以使用利用了溢出环绕(overflow wrapping)(例如,简单的二进制计数器)的有穷字大小的加法器将来自总线业务的一或零相加,由此生成来自总线业务的随机成分。在其他实施例中,基于总线业务的过去历史、功能生成器内的内容以及对一个或多个数学运算符的使用,一般功能生成器(general function generator)可以用于生成随机成分。可以将从这各种方法中每种方法获得的随机成分用于避免卡在如下情形:因为起初在同步过程的开始时不知道帧的开始在哪里,同步方法在有效和无效同步位置(即,同步模式)之间连续切换。在其它实施例中,总线可以开始于已知状态,其中,伪同步模式不存在,但是本实施例将不允许另一设备在总线已开始之后获得同步。因此,对于该方案,如果新设备尝试连接到总线,则总线将需要重启。因此,如果选择该解决方案,没有任何音频扰动的热插入是不可能的。
除了检查在存在两个恒定同步部分的匹配之外还存在动态同步部分的匹配之外,在至少一些实施例中,还有可能检查两个恒定同步模式之间的距离是否保持恒定。这对于有效帧格式是正确的。因此,有可能检查具有有效动态同步部分的两个同步模式之间的距离也具有恒定距离(以例如两个同步模式的开始或结束之间的比特数目为单位)。为了执行这种检查,定位至少三个有效恒定同步部分,以能够计算之后可以比较的两个距离。
在本文描述的同步方法的至少一个实施例中,随机成分可以在恒定同步部分已被定位但是存在一个或多个错误(例如,基于刚找到的同步模式来确定的当前帧长度与基于之前定位的同步模式来确定的之前帧长度不同)时使用。该额外信息可以用于丢弃无效同步位置。
在本文描述的通用同步方法的至少一个实施例中,通用同步方法的在比特流模式下搜索同步模式的部分可以利用时钟选通,以跳过来自假定同步模式的比特不存在的信道的数据(例如,如果已经仅使用来自每隔一个比特的信息实现了锁定,则忽略每隔一个比特)。使用时钟选通的一个好处是其将允许减少功耗,由此使得同步方法更加节约能量,因为由于假定一些帧信道不具有同步模式比特,因此不对他们进行处理。使用时钟选通的另一好处是:可以将公共搜索结构用于在字操作模式和比特流操作模式下搜索同步模式,因为时钟选通本质上允许以类似于字数据的方式来处理比特流帧数据,如下面将更详细解释的。
一般而言,本文描述的各种通用同步方法将采用上限,以减少同步时间。例如,当假定总线64正工作在字模式下并搜索同步模式时,可以对帧长度加以上限。因此,如果为了定位同步模式而搜索的比特数目大于最大定义的帧长度且尚未找到同步模式,则搜索可以切换到比特流模式,其中,同步引擎假定同步符号模式已经与其他信息复用,且将搜索正确的信道位置、信道内的位置和信道的数目,以实现同步。备选地,在至少一个其他实施例中,搜索方法可以在切换到比特流模式之前在字模式下再尝试一次或多次。
在至少一个实施例中,当假定总线正工作在比特流模式下时,在搜索同步模式时,可以对帧格式中的帧信道数目加以上限。例如,如果假定帧信道的最大数目为Amax,则用于本文描述的同步方法的搜索时间与Amax3成近似正比。已发现将Amax设为16或更小导致了获得同步的可接受时间量。然而,在更高时钟频率、更高处理功率或这二者的条件下有可能使用更高的Amax值,其中,获得同步的时间是可接受的。如果在尝试了所有可能数目的比特流信道和这些信道中的每个信道的同步位置之后尚未获得同步,则同步方法可以再次切换回字模式并重新开始搜索过程。这在以下情况下可以是有益的:在主设备连接到总线之前,从设备连接到总线,且因为主设备尚未准备好发送同步模式或者主设备由于某些故障或节约功率的原因处于空闲状态,从设备正在接收时钟信号而没有接收任何同步模式。
在本文描述的各种同步方法的至少一个实施例,如果从设备54与主设备52脱离锁定(即,离开同步),例如由于时钟信号上的小错误,则通过假定之前确定的帧长度和相同的帧格式以避免完全的更长的同步搜索,从设备54可以尝试重新获得同步。如果这不成功,从设备54可以使用相同假设来重新尝试同步若干次。如果这依然不成功,则从设备54可以假定主设备52已切换到使用不同的帧格式或操作模式以在总线64上通信,然后则可以使用完全的同步搜索来使得从设备能够变为与主设备同步。
应当注意到:在备选实施例中,本文描述的通用同步方法的各种示例实施例的步骤可以按不同顺序来实现。例如,与首先假定字模式并执行针对同步模式的搜索相反,可以首先假定比特流模式。
本文描述的各种同步方法中的至少一个同步方法的好处是:可以相当快速地实现同步,例如,在假定6MHz时钟速率的一些情况下近似60毫秒或更少。平均“锁定时间(time-to-lock)”时间可以远快于该值。在一些实施例中,为了减少搜索时间,不是信道数目和帧长度的所有组合都被允许。
在一方面,本文描述的通用同步方法的各种示例实施例中的至少一个示例实施例的好处是:在操作期间支持将从设备热插入总线64以及将从设备从总线64中热移除。因此,从设备54可以自己确定帧格式和操作模式,并告诉主设备52其已连接并准备好根据总线通信协议进行通信。这可以涉及从设备54确定操作模式、帧格式、子帧长度和帧的开始位置。
在一方面,本文描述的通用同步方法的各种示例实施例中的至少一个示例实施例的好处是:只要表示从设备54、总线64和这些系统组件之间的物理链路的硬件未物理故障,则从设备54就可以与总线64通信并根据总线通信协议通信,而不管从设备54开始所处的状况或总线64的初始或稍后状况。这为在总线上出现噪声的情况下和在设备由于随机事件(例如,阿尔法粒子改变内部寄存器状态或超出设备本身的控制的其它内部状态改变)而发生故障的情况下的同步提供了增加的鲁棒性。此外,如果设备由于糟糕的实现而停转,依然有可能在该停转之后获得对该设备的访问权,因为内部同步引擎将确保在(要么由于缺少同步,要么由于重复的总线冲突而导致的)错误之后设备从总线64回退,且然后将再次尝试取回同步。从设备54在没有来自主设备52的帮助的情况下可以连接到总线64这一事实本身就使得系统更加鲁棒。
在一方面,本文描述的通用同步方法的各种示例实施例中的至少一个示例实施例的好处是:可以在总线的操作期间改变帧格式参数和/或操作模式,且如果从设备54尚未连接到总线64,则其依然可以实现同步。
在对通用同步方法的各种实施例的以下描述中,应当理解:所描述的同步模式可以是S字,同步恒量(也称为恒定同步部分)可以是S字的恒定同步符号字段中的数据,且动态同步部分可以是S字的动态同步符号字段中的数据。备选地,可以存在以下实施例:其中,同步模式可以包括来自恒定同步符号字段的数据、来自动态同步符号字段的数据或来自恒定同步符号字段和动态同步符号字段的数据的组合。在其他实施例中,为了同步的目的,恒定同步符号或动态同步符号可以单独使用或以其他组合方式使用,例如,在帧中使用多于一次。
应当注意到:可以用多种不同方式来实现同步,且可以将现在描述的实施例实现有低门数(gate count)。备选地,可以通过使用较高门数来实现更快的同步方案。
现在参见图54,其中示出的是通用同步方法900的示例实施例的图。通用同步方法900的方面之一是从设备54的以下能力:在总线64激活之后同步到主设备52,而不管正在将什么操作模式和帧格式用于统一总线通信协议,该统一总线通信协议用于通过总线64通信。
在902,方法900假定第一操作模式用于统一总线通信协议。因此,方法900假定正确的操作模式要么是字格式要么是比特流格式,然后进行到基于该假定来定位同步模式。在该示例中,方法900首先假定字操作模式。
在904,方法900根据第一操作模式在总线64上发送的数据中的一个或多个位置处搜索同步模式。如果同步模式包括恒定同步部分和动态同步部分,则动作904包括搜索恒定同步部分。在至少一个实施例中,恒定同步部分对于第一和第二操作模式可以不同。备选地,在另一实施例中,如果同步模式包括固定部分和动态部分,则动作904包括搜索动态同步部分。
备选地,在至少一个实施例中,只要可以通过确定性方法来确定动态同步部分,则方法900就可以搜索整个同步模式,而不管同步模式是否包括恒定同步部分。在至少一个实施例中,动态同步部分可以由确定性方法来生成,使得两个连续同步模式的动态同步部分是不同的,但是可确定。在至少一个实施例中,确定性方法可以利用前述CRC生成器或变型之一。
在至少一个实施例中,可以存在使用的若干同步模式,且动作904可以包括通过比较发送数据与这些同步模式中的每个同步模式来搜索这些同步模式之一。
在至少一个实施例中,不同同步模式可以按定义的顺序出现,且方法900可以使用所定义的顺序来搜索不同同步模式。
在904,当假定字模式时,方法900包括:挑选发送数据的特定时隙作为同步模式的开始时隙。然后从总线业务中读取从开始时隙到结束时隙(该结束时隙使得长度与正在搜索的同步模式的长度相同)的发送数据,并且将其与正在搜索的同步模式进行比较。在该示例实施例中,搜索的同步模式是恒定同步部分。在其他备选实施例中,可以对不同长度的数据进行读取并将其与同步模式的不同部分进行比较,包括整个同步模式、仅动态同步部分或恒定同步部分和动态同步部分这二者。如果没有匹配,则可以将开始时隙前进一个时隙,且重复该过程。在并行实现中,有可能并行挑选若干个开始时隙,从总线业务中读取数据,并将读取的数据与同步模式的一部分或整个进行比较(如刚解释过的一样)。
在904,当假定比特流模式时,方法900包括挑选发送数据的特定时隙作为同步模式的开始时隙。接下来,假定比特流帧信道的数目。然后可以基于假定的比特流帧信道的数目和每个帧信道的数据的长度来计算帧长度。例如,使用之前描述的以下比特流帧格式:“控制帧信道包括S字,后接X字和Y字,其中,每个字是16比特”,每个帧信道的数据的长度是48比特,且将帧长度以比特为单位计算为48*(假定比特流帧信道的数目)。在一些实施例中,在S、X和Y字之间可以存在某个间距。定义比特流帧信道的最大数目,且搜索包括在发送数据中迭代搜索。这是通过首先假定将特定数目的信道加以复用来进行的。然后,有可能在这些信道中的每一个信道中在所有有效位置上搜索,直到获得或未获得有效的同步模式为止。如果未发现同步模式,则将尝试下一个信道,且如果已尝试了所有信道,则将增加假定被复用的信道数目并重复相同过程。该过程可以继续,直到超过了针对总线64定义的最大信道数目,在该情况下,过程可以要么重新开始要么在字模式下再次开始。该搜索可以通过假定1个比特流帧信道来开始。应当注意到:在本描述的该部分中,术语比特流帧信道意味着涵盖或包括控制帧信道、比特流帧信道、虚拟帧信道和复用帧信道。
例如,假定比特流帧信道的最大数目为3,搜索通过假定存在1个比特流帧信道来开始,这将是帧仅包括帧控制信道而没有数据的情况(除非还允许控制字之间的间距)。在该情况下,同步模式的比特在每个比特上出现。假定之前描述的S字、X字和Y字方案,在该情况下帧的发送比特应当包括S字比特15、S字比特14、...、S字比特0、X字比特15、X字比特14、...、X字比特0、Y字比特15、Y字比特14、...、和Y字比特0(应当注意:控制字的数目、比特数目和这些比特和字的排序可以在备选实施例中变化)。在开始时隙位置处开始,读取接下来的M个发送数据比特,以确定它们是否匹配同步模式,其中,M是搜索的同步模式中的比特数目。如果没有匹配,则将开始时隙位置向前移动一个位置,丢弃初始第一个比特,读取接下来的发送比特且再次重复M比特比较。如果没有匹配,该移动开始时隙位置并执行比较的过程重复,直到定位了同步模式或达到最大帧信道长度为止。如果尚未找到同步模式,则在假定存在两个比特流帧信道的情况下,重复该搜索过程。应当注意:针对一个比特流帧信道的搜索过程与在字模式下进行的搜索相同。在备选并行实施例中,FIFO结构可以用于在与同步模式进行比较的发送数据中读取并步进,尽管一般可以将串行移位寄存器用于比较。
现在假定帧格式中存在2个比特流帧信道,方法900每隔一个发送数据的比特来搜索,因为在该情况下,同步模式的比特每隔一个比特或每隔一个时隙出现。假定之前所述的S字、X字和Y字方案,在该情况下帧的发送比特应当包括S字比特15、数据信道1比特0、S字比特14、数据信道1比特1、...、Y字比特0、和数据信道1比特47。再一次地,在开始时隙位置处开始,读取接下来的M个发送数据比特(其均由1个比特间隔),以确定它们是否匹配同步模式。如果没有匹配,则将开始时隙位置向前移动两个位置,读取接下来的M个发送数据比特,且重复比较。如果重复使用字模式下的匹配,则这可以用硬件方式优雅地进行,但是该时间是时钟选通的(或时钟启用的),使得其仅每隔一个比特才有效。这样,每隔一个比特进行跳过等价于在下一个位置上搜索并针对每隔一个位置添加时钟选通。这等价于跳过两个比特。因此,可以进行简单和统一的算法,其中,假定信道数目为N,且通过在N-1个信道的位置上禁用时钟来跳过这N-1个信道,且下一个要调查的比特是在从上一个调查的位置之后的N个位置上的比特。如果没有匹配,该移动开始时隙位置并执行比较的过程重复,直到定位了同步模式或达到最大帧长度为止。如果尚未找到同步模式,则在假定存在两个比特流帧信道但是将开始位置仅延迟1个比特的情况下,重复该搜索过程。该延迟可以通过跳过单一时钟循环且由此将所有搜索移动到下一帧信道来进行。重复刚刚描述的搜索过程,直到定位了同步模式或达到最大帧信道长度为止。如果尚未找到同步模式,则在假定存在三个比特流帧信道的情况下,重复该搜索过程。
现在假定帧格式中存在3个比特流帧信道,方法900每隔两个发送数据的比特来搜索,因为在该情况下,同步模式的比特每隔两个比特或每隔两个时隙出现。假定之前所述的S字、X字和Y字方案,在该情况下帧的发送比特应当包括S字比特15、数据信道1比特0、数据信道2比特1、S字比特14、数据信道1比特1、数据信道2比特1、...、Y字比特0、数据信道1比特47和数据信道2比特47。再一次地,在开始时隙位置处开始,读取接下来的M个发送数据比特(其均由两个比特或假定的比特流帧信道的数目减一来间隔),以确定它们是否匹配同步模式。如果没有匹配,则将开始时隙位置向前移动三个位置(或向前移动假定的比特流帧信道的数目)。为了在该情况下向前移动,在至少一个实施例中,针对字模式搜索算法的时钟信号通常可以被禁用或选通两个时钟周期,由此使得下一个时钟周期等于下一个比特(由此重复使用相同的算法)。然后丢弃第一个发送比特,然后读取接下来的发送数据比特,且重复比较。如果没有匹配,该移动开始时隙位置并执行比较的过程重复,直到定位了同步模式或达到最大帧长度为止。如果尚未找到同步模式,则在假定存在三个比特流帧信道但是将开始位置仅延迟1个比特的情况下,重复该搜索过程,这同样可以通过跳过一个时钟循环来进行。重复刚刚描述的搜索过程,直到找到同步模式或达到最大帧信道长度为止。如果尚未找到同步模式,则在假定存在三个比特流帧信道但是将开始位置仅延迟1个比特的情况下,重复该搜索过程。重复刚刚描述的搜索过程,直到找到同步模式或达到最大帧信道长度为止。在该示例中,现在可以获得同步,因为方法已在使用三个信道间距的所有帧信道中进行了搜索。然而,如果尚未找到同步模式且已超过总线所允许的最大信道数目,则模式变为字模式或者在再次假定单一信道的情况下重新开始整个过程(这在主设备52未发送任何同步信息的情况下可以是有益的)。
一般而言,当在假定比特流模式下进行搜索时,搜索包括假定最大A个比特流帧信道、信道长度Q比特、以及在要搜索同步模式的数据中可能执行若干轮(如果并行硬件存在,则可以使用单轮)。设置帧信道的当前数目,且当前帧信道索引B设为1。定义TS0的开始时隙,且在第B轮中,假定同步模式在第B个比特流帧信道中。例如,假定A是4,则C设为1且B设为1且搜索第一比特流信道。如果未找到同步模式,则假定存在2个比特流帧信道,C设为2,B设为1,将开始时隙延迟1,且搜索第一个比特流信道。如果未找到同步模式,则B设为2且通过跳过一个时隙并在第二信道中开始来针对第二比特流帧信道重复搜索。如果未找到同步模式,则假定存在3个比特流帧信道,C设为3,B设为1,将开始时隙再次延迟1,且搜索第一个比特流信道。如果未找到同步模式,则B设为2且针对第二比特流帧信道重复搜索。如果未找到同步模式,则B设为3且针对第三比特流帧信道重复搜索。如果未找到同步模式,则假定存在4个比特流帧信道,C设为4,B设为1,将开始时隙再次延迟1,且搜索第一个比特流信道。如果未找到同步模式,则B设为2且针对第二比特流帧信道重复搜索。如果未找到同步模式,则B设为3且针对第三比特流帧信道重复搜索。如果未找到同步模式,则B设为4且针对第四比特流帧信道重复搜索。如果未找到同步模式,则由于B=C=A,则已搜索了最大数目的比特流帧信道且方法900移动到908。备选地,一旦定位了同步模式,则方法900不一定经历上述所有提到的动作。
可以存在针对比特流模式进行搜索的各种备选实施例,就如针对字模式所描述的那样,其中,可以读取不同长度的数据并将其与同步模式的不同部分进行比较。此外,可以存在以下实施例:其中,使用并行实现,在并行实现中,有可能并行挑选若干个开始时隙,读取来自总线业务的数据并将读取的数据与同步模式的一部分或整个进行比较。作为示例,如果比特流的数目限于2N,有可能通过以下方式将搜索时间减少近似(N+1)倍:首先读取单一信道,并在完成该操作时并行读取两个信道(均偏移一个时隙),且在完成该操作时并行读取三个信道且依此类推,直到定位了同步模式或已搜索了最大数目的比特流帧信道为止。
由于在字模式下和比特流模式下进行搜索之间的相似性,在至少一个实施例中,有可能通过在比特流模式下进行搜索时使用时钟选通,将公共搜索结构(即,计算机代码或逻辑结构,例如状态机)用于在字操作模式和比特流操作模式下搜索同步模式。时钟选通用于跳过来自假定不存在同步模式的比特的帧信道的数据。例如,当假定存在三个比特流帧信道时,假定开始时隙TS0,在第一轮下,假定同步模式存在于第一比特流帧信道中,其具有在时隙TS0、TS3、TS6等中发送的比特。因此,时钟选通可以用于挑选在这些时隙上发送的数据,并忽略在时隙TS1、TS2、TS4、TS5等上发送的数据。如果在第一轮期间未找到同步模式,则将开始点延迟一个时隙并重复搜索。因此,假定同步模式存在于第二比特流帧信道中,其具有在时隙TS1、TS4、TS7等中发送的比特。因此,时钟选通可以用于挑选在这些时隙上发送的数据,并忽略在时隙TS0、TS2、TS3、TS5等上发送的数据。如果在第二轮期间未找到同步模式,则将开始点延迟一个时隙并重复搜索。因此,假定同步模式存在于第三比特流帧信道中,其具有在时隙TS2、TS5、TS8等中发送的比特。因此,时钟选通可以用于挑选在这些时隙上发送的数据,并忽略在时隙TS0、TS1、TS3、TS4等上发送的数据。
在一些实施例中,有可能通过在比特流模式下使用并行实现来减少搜索时间。例如,取代一次假定一个比特流帧格式的情况下在发送数据中进行搜索,有可能在同一时间假定多个比特流帧格式的情况下在发送数据中进行搜索。这将导致更高的门数以及复杂度,但是减少了实现同步的时间。
在906,如果找到了同步模式(这取决于上述特定实施例),方法900移动到910。然而,如果未找到同步模式,则方法900移动到908。当假定字模式作为操作模式时,除非更早的定位到同步模式,否则搜索动作在发送数据上针对各种开始时隙位置执行,该各种开始时隙位置高达最大帧长度并且包括该最大帧长度。当假定比特流模式作为操作模式时,除非更早的定位到同步模式,否则搜索动作在发送数据上针对各种开始时隙位置执行并且针对高达最大帧信道数目的任何数目帧信道来重复,该各种开始时隙位置高达最大帧长度并且包括该最大帧长度。在一些实施例中,可以选择仅搜索帧长度和信道数的有限子集,以减少实现同步的时间。
在比特流模式或字模式下,针对新发送的数据来挠性搜索,或者可以保存一部分发送数据且可以在保存的数据上迭代搜索,直到找到同步模式或达到搜索限制为止。这两个实现之间的选择取决于从设备54可以投入搜索同步模式的存储器量。例如,如果仅1个缓冲区可以用于搜索,则使用曾描述过的第一种搜索方法。该第一种方法的优点是更小的芯片大小、更低的成本以及更简单的实现。
在908,在假定第一操作模式(即,字模式)的情况下尚未获得同步,因此针对统一总线通信协议假定第二操作模式(即,比特流模式)。然后方法900根据第二操作模式对发送数据执行搜索动作904和906以及获得动作910。更一般地,动作908包括切换到另一帧格式。因此,如果搜索动作904和906在比特流模式下不成功,则在908再一次假定字模式,且在904和906再次搜索同步模式。重复在不同帧格式之间的切换,直到获得同步。在正常条件下,从设备将继续执行该搜索,除非其被编程为不同的状态。从设备应当继续再次执行搜索的原因(即使其已经完成了搜索一次)是主设备52可能由于某些故障而临时停止工作,或者其可能比从设备上电更慢。因此,为了鲁棒性,从设备应当单纯的继续搜索。如果需要停止搜索,则主设备52可以可选地对总线时钟进行选通,且由此停止从设备重复执行用于同步的搜索。
在910,方法900包括当根据至少一个同步规则验证了所定位的同步模式时获得同步,该至少一个同步规则取决于使用的具体实施例。一般而言,至少一个同步规则可以涉及在910处执行验证一次或多次。
例如,在至少一个实施例中,一旦已定位到同步模式,则搜索动作904和906和获得动作910包括搜索下一个同步模式(即,连续的同步模式),以确定由统一总线通信协改所正在使用的帧长度。然后同步规则可以包括执行搜索动作904和906以及获得动作910若干次,以验证所确定的帧长度正确。例如,如果找到三个连续同步模式,使得计算出两个帧长度,则如果这两个帧长度不同,则存在错误。备选地,如果两个帧长度相同,则在一些情况下这可以用作验证。一旦找到了帧长度,则可以通过将帧长度除以三来找到命令字之间的间距,例如通过二进制除法或通过将计数器递增三直到该计数器等于帧长度值(则递增的次数等于子帧长度)。
在至少一个实施例中,验证包括使用同步模式的动态部分。例如,搜索动作904和906和获得动作910可以包括:读取与当前定位的同步模式的恒定同步部分相关联的当前动态同步部分,且同步规则包括基于确定性方法和当前动态同步部分来计算预期动态同步部分,定位下一个恒定同步部分并将与下一个恒定同步部分相关联的动态同步部分与预期动态同步部分进行比较,以降低伪同步的可能性。
如果预期动态同步部分不等于下一个动态同步部分,则两个同步模式(即,当前同步模式和前一同步模式)中的至少一个可以是不正确的。在至少一个实施例中,如果预期动态同步部分不等于下一个动态同步部分,则可以假定当前定位的同步模式是无效的。在至少一个备选实施例中,如果预期动态同步部分不等于下一个动态同步部分,则可以假定先前定位的同步模式是无效的,且可以假定当前定位的同步模式是有效的。在这些选项中任意一个之间进行选择可以基于附加信息,例如,如下面更详细描述的在判定过程中包括随机成分。
在至少一个备选实施例中,同步规则可以包括让方法900继续搜索具有动态同步部分的同步模式(该动态同步部分与计算出的动态同步部分相匹配),且将该定位的同步模式视为真模式。可以对被搜索以确定其是否具有与计算出的动态同步部分相匹配的动态同步部分的同步模式的数目加以限制(FL)。如果达到该限制,则方法950可以将最后FL个定位的同步模式中的任一个随机选择为真同步模式,或者将接下来到来的同步模式之一随机选择为真同步模式,并基于通过查看接下来FL个定位的同步模式,基于更新的动态同步部分开始针对接下来的同步模式的搜索。
在至少一个实施例中,确定性方法可以包括使用具有定义了15个状态的4个比特的CRC生成器(即,采用LRS(即,线性递归序列)的具有反馈的移位寄存器),使得连续的同步模式具有基于CRC的连续状态的动态部分。如果针对当前动态部分定位了一个状态,则可以使用确定性方法来计算下一个动态部分的下一个状态。在至少一个备选实施例中,可以使用具有不同比特数的CRC。在至少一个备选实施例中,可以使用其他确定性方法,例如(但不限于):采用8、16或不同数目比特的基于LRS拓扑的CRC生成器。作为另一示例,可以使用简单的加法器,尽管其将具有以下确定:如果计数器递增一,则在每个迭代期间改变的比特数目将是有限的。在一般实施例中,可以使用生成器Xn+1=F(Xn)来找到值的序列,其中,生成器函数F将导致从值Xn到不同值Xn+1的映射,这可以使用数学函数来进行,使得,在每一步中随机改变尽可能多的比特的同时,利用给定区间内的尽可能多的值。实现这种方案的示例候选是以下数学算法:其被写为生成在闭区间上均匀分布的随机离散数字。除了单一或有穷数目的同步恒量之外,这些随机数也可以在总线64上发送,这旨在消除大多数但不是全部无效同步位置,且由此加速同步过程。
例如,假定CRC生成器执行以下操作以计算动态同步部分:{S4,S3,S2,S}={S3,S2,S1,(S4XOR S3)}。在该示例中,动态同步部分在重置时可以被初始化为“1111”。在至少一个实施例中,不使用“0000”条件,且如果遇到,则“0000”条件应当导致下一循环期间的“1111”状态。这样做的原因是:如果用使用LRS结构的少量逻辑来实现CRC计数器,则如果错误地遭遇该状态,则CRC计数器将卡在零状态。因此,除非将该值“0000”自动映射到具有不同于零的至少一个比特的值,否则其可能在恢复方面有麻烦(至少对于发射机是这样)。类似地,如果在CRC生成器中使用不同于四的比特数目,有必要检查将导致生成器卡住的值(通常是零),且将这些值映射为另一值。该示例的十六进制的整个序列将如下所示:{F,E,C,8,1,2,4,9,3,6,D,A,5,B,7}。作为伪随机值的动态同步部分允许更快的锁定时间,并减少从设备54锁定到可能由随机总线业务创建的伪同步模式的似然率。
一般而言,可以进行验证若干次,以使得同步过程对于错误更加鲁棒。例如,同步规则可以包括重复各种实施例的计算、定位和比较动作一次或多次,以进一步减少未同步的可能性。作为另一示例,使用CRC生成器的验证可以进行例如两次、七次或八次或直到CRC生成器可以生成的状态数目。在至少一个实施例中,为了确保从设备54与主设备52连续处于锁定状态,从设备52可以连续执行CRC检查,并在已经建立同步之后的每个帧期间检查同步恒定部分的出现。
在至少一个实施例中,同步规则可以包括在定位动作904和906和获得动作910中添加随机成分,以增强在总线业务上的有噪状况下且当总线业务非常类似于同步模式时的同步可能性。
例如,在至少一个实施例中,随机成分包括:读取特定时间段中的总线业务的奇偶性并使用该奇偶性信息来进行与当前定位的同步模式是真同步模式还是伪同步模式相关的随机选择。这样,同步方法将不卡在循环中,例如,在每隔一个定位的恒定同步模式有效且每隔另一个无效的情况下,由此使得所有CRC检查无效。在至少一个实施例中,时间段可以是发送数据的一帧。
作为另一示例,在至少一个实施例中,随机成分可以在以下时间使用:在错误的位置上(即,不在帧的开始处)定位到同步模式,由此导致同步过程期间的一个或多个错误。例如,这些错误可以由于以下事实导致:存在导致总线64上可能看起来像正在搜索的同步模式但实际上是伪同步模式的发送数据的情况。如果伪同步模式是真实随机数据业务的结果,它们一般将仅短时间干扰同步过程且当它们消失时,方法900将找到真同步模式,且从设备54将变得与总线64同步。然而,当搜索恒定同步部分时,可以存在导致恒定活动的情形,例如由温度传感器提供的恒定温度数据,其匹配恒定同步部分。即使恒定同步部分可能是很多比特长,这也可能发生。在该情况下,这些伪同步模式可以长时间出现在总线64上的发送数据中,这将干扰同步过程。
现在参见图55a和55b,其中分别示出的是第一场景和第二场景的图,在第一场景中,在发送数据中发送真同步模式,以及在第二场景中,在发送数据中发送真和伪同步模式。在该示例中,发送数据(除了控制数据之外)是音频数据。然而,该示例对于其他类型数据也可以是真实的,例如,仪表数据(即,传感器数据)。在图55a中,控制数据包括由数据部分分隔的S字、X字和Y字,该数据部分包括音频数据。S字包括真同步模式。在图55b中,控制数据包括与图55a所示相同的一般组件。然而,现在在数据部分中存在发送的三个伪同步模式(即,三个伪S字)。在备选情况下,伪同步模式可以更接近于数据部分的开始或结束,可以仅在某些子帧中和/或可能可以在连续数据部分的不同位置上。伪S字包含与真同步模式相对应的数据比特。然而,它们不在帧开始处的正确的位置上(即,正确的同步位置),且因此是伪的。因此,一旦知道了真实位置,则可以基于这些伪S字的位置来确定它们。备选地,可以如前所述,通过检查这些伪S字的动态同步部分以确定它们是否与预期的动态同步部分相匹配,来确定这些伪S字。
在通用同步方法900中可以使用随机成分来处理伪同步模式的情形。随机成分是通过使用随机变量来获得的。在至少一个示例实施例中,随机变量可以是在特定时间段上的发送数据的奇偶性。例如,如果从上一个同步模式开始一的数目是偶数,则奇偶性可以设为1,否则1设为0,或者反之也行。奇偶性是比特总数模二,但是也可以定义其他类似随机量,例如,比特总数模四(即在相加时的最后两个比特)。在至少一个实施例中,可以使用附加的CRC生成器,其基于从上一个帧同步模式开始的所有总线业务。CRC生成器可以将来自CRC生成器本身的输出作为输入,并将其与来自总线64的输入进行异或(应当进行特殊规定,以将寄存器值零映射为某个其他值)。对总线业务中的1或0的数目进行计数是随机过程,因为量化过程本身由于热噪声而是随机过程,该热噪声存在于任何物理测量中(例如,量子电子电噪声或量子机械噪声)。然后基于该计算来进行随机判定。在至少一个实施例中,该判定可以是要么将前一同步模式保持为真模式且继续搜索下一个真同步模式,或将当前同步模式保持为真模式且继续搜索下一个真同步模式。该判定可以通过检查计算出的奇偶性是否等于0来进行。备选地,该判定可以通过检查计算出的奇偶性是否等于1来进行。在每个情况下,同步位置上的改变的概率是1/2。在一般情况下,基于随机变量停留在当前位置的概率将是p,且改变到新位置的可能性将是(1-p)。不管将前一同步模式还是将当前同步模式保留为真同步模式,使用该方法早晚将选择到正确的真同步模式。在至少一个实施例中,取代就保留当前同步模式作为帧同步模式,可以在方法900将下一个定位的同步模式视为真同步模式之前可以丢弃从当前同步模式开始的随机(但是有穷)数目的同步模式。
基于所选择的随机变量(即,如一个实施例中讨论的奇偶性),将先前定位的同步模式选择为帧同步模式可以被注记为具有概率p,且将当前定位的同步模式选择为帧同步模式可以被注记为具有概率1-p。然后,方法900继续搜索下一个恒定同步部分,并将关联的动态同步部分与预期的动态同步部分进行比较。在一些情况下,在存在看起来像恒定同步符号的大量总线业务的情况下,方法在两个帧开始位置之间保持在正确同步位置上的似然率是PN,其中,N是伪同步位置的数目。然而,一旦找到了正确同步位置,则搜索方法将丢弃伪位置并仅查看正确位置。
在至少一个实施例中,以及在让搜索过程完全确定性的尝试中,有可能通过下述方式来加速该同步搜索:制造与有效同步恒量相关联的最后CRC值的列表,由此快速消除不具有与来自该列表的任何位置相匹配的动态同步部分的较晚同步恒量匹配(这可以涉及足够长以处理总线64上所有可能扰动的列表)。
在至少一个实施例中,有可能通过观察在两个定位的恒定同步部分之间有多少个时隙(即,同步间隔值)来消除很多伪同步模式。下一个定位的恒定同步部分的间距的较低端应当至少是同步间隔值(在字模式下)。如果搜索方法已遇到了两个同步符号之间的距离L,如果距离短于两个稍后找到的同步符号之间的L,则这些同步符号中的至少一个是伪的(应当注意到:术语同步符号类似于术语同步模式或同步部分)。
在至少一个备选实施例中,一旦找到了真同步模式,方法包括继续向前搜索,直到已到达了最大帧长度或者定位的同步模式的动态同步部分与预期动态同步部分相匹配。如果该后一条件有效,则方法使用该当前同步模式和前一同步模式之间的间距来继续搜索将来的同步模式。这与前一方法的不同之处在于:其将继续维持给定的第一同步位置,直到已证明其是伪同步位置或者是用于有效同步位置的良好候选(因为恒定同步部分和动态同步部分都通过了检查)。这与在存疑时在两个同步位置之间随机选择的技术成为对比。如果证明给定的位置不可能是有效同步位置,则同步方法将移动到给出了可能的同步符号的下一同步位置,或者其可以超过最大帧长度。如果该同步方法未能找到用于验证的多个同步模式,则该方法可以使用上一个定位的同步模式作为真同步模式来开始,但是为了执行,这可以涉及一些存储器。如果后一条件为真,且达到最大帧长度,则同步方法重新开始,并开始搜索下一真同步模式。尽管该方法可能看起来提供了更快的同步,存在不能实现同步的风险,因为该方法可能由于随机数据的结构而持续跳过真同步位置(尽管向前跳过素数个位置可能是有帮助的,例如11个位置)。因此,为了让该方法工作,可能必须存储所有同步位置并采用该信息来工作,或者向方法添加某种随机性,例如,在再次开始搜索匹配恒定同步符号和匹配的动态同步符号之前跳过随机数目的同步符号。该方法看起来最适合并行硬件实现。如果这可用,有可能实现多个搜索引擎,由此使得整个算法工作地非常快和可靠。第一同步引擎可以寻找与第一找到的同步衡量相匹配的动态同步符号,第二同步引擎可以寻找来自第二同步位置的匹配动态同步符号,且依此类推,直到激活了所有N个同步引擎为止。该方法将允许在两个帧开始位置之间的N-1个伪同步位置而不遇到任何问题。
在至少一个备选实施例中,可以根据与在最大长度数据中找到的所有有效恒定同步部分相对应的动态同步部分来制造表格。这些定位的动态同步部分的位置也被记录在表格中。接下来,可以在位置列表中记录表格中与预期动态同步部分相匹配的动态同步部分的位置。如果在位置列表中的连续为止的间隔中存在重复,则在这些位置之间的距离将是实际帧长度,且这些位置可以用于获得同步。该方法的主要问题是硬件开销,否则其提供了鲁棒的同步。
在上述任一变型中,如果实现了同步,则方法900执行动作912。如果未实现同步,且操作模式依然假定是正确的,则方法900再次执行搜索动作904和906,且可以重置一个或多个参数。
应当注意到:可以存在使用本文描述的至少两个同步规则的实施例。还应当注意到:还可以存在使用本文描述的同步规则的各种组合的实施例。此外,应当注意到:可以存在使用本文描述的至少一个同步规则的实施例。
在912,同步已由从设备54来实现。取决于统一总线通信协议的具体实现,从设备54可被允许向主设备52发回某些信息,以信号通知其已实现了锁定(即,同步)。此时,主设备52可以执行各种动作,例如,向从设备54发送各种参数数据,以配置从设备54,使得其可以根据统一总线通信协议来通信,并具有被启用的至少一个端口的一个或多个输入信道、一个或多个输出信道或一个或多个输入和输出信道。在至少一个实施例中,从设备54将不具有连接到总线64的任何端口,且总线64将仅用于控制目的,例如,在从设备54中寄存器读取/写入操作或功能激活。在备选实施例中,设置也可以由从设备54来进行或通过事件组合来进行,例如,涉及主设备52和从设备54。在至少一个实施例中,在设置全部或一些从设备设置时可以涉及另一主设备。
应当注意到:可以存在以下实施例:其中一旦实现了同步,要继续执行方法900以维持同步。在存在错误且针对同步模式的仅一个实例丢失同步的情况下,方法900可以涉及假定操作模式和帧格式参数相同,使得方法900不一定经历将其所有参数重置的完全同步过程。例如,由于一旦实现了同步则确定了帧长度和帧格式,则在维持同步时,不检验发送数据中的其他位置,除非他们在距离上一个同步模式的确定帧长度距离的附近。这允许方法900忽略出现在同步模式之间发送的数据块中的任何伪同步模式。备选地,如果在延长的时间段上丢失了同步,则方法900可以在将其参数完全重置的情况下重新开始,以从最开始处开始同步过程作为示例,如果从设备54在比最大可能帧长度更长的时间上未接收到同步模式,则出现了某种错误且从设备54应当去激活有效的任何端口,并重启同步过程。
还应当注意到:针对方法900可以首先假定任一操作模式。例如,可以假定第一操作模式是字模式且可以假定第二操作模式是比特流模式(如果在假定字模式的情况下未实现同步)。然而,在备选实施例中,可以假定第一操作模式是比特流模式且可以假定第二操作模式是字模式。
现在参见图56,其中示出的是用于同步到使用统一总线通信协议来通信的主设备的通用同步方法950的示例实施例的图。通用同步方法950利用了并行实现。通用同步方法950类似于通用同步方法900,以及针对方法900描述的各种备选,除了在952处,方法950同时假定第一和第二操作模式(即,字模式和比特流模式)用于统一总线通信协议,并使用在假定的操作模式之一下同时搜索同步模式的两个单独的同步引擎(即,一个同步引擎在字模式假定下搜索同步模式,且另一个同步引擎在比特流模式假定下搜索同步模式)。因此,动作954包括在根据第一和第二操作模式发送的数据中的一个或多个位置上的同步模式的并发搜索。类似地,动作960包括在根据第一和第二操作模式之一的至少一个同步规则来验证同步模式时获得同步。因此,动作954、956、960和962类似于动作904、906、910和912。
动作958不同于动作908,因为在动作958处,如果未获得同步,则方法950根据第一和第二操作模式对根据统一总线通信协议的发送数据执行搜索和获得动作。在操作模式之间的切换不针对方法950执行,因为并行实现用于根据两种操作模式并发搜索。
从动作958到动作954的环回导致了更鲁棒的同步方法,因为可以在两种操作模式下重复相同搜索过程,且可以实现不同的结果,因为在搜索的第一实例中,可能存在影响搜索结果的错误。例如,当正在执行同步方法950的前一实例时,可能存在总线错误,主设备52可能尚未正确启动或初始化,或者可能存在总线冲突等。在一些情况下,当执行同步方法950时,在从设备54和总线64之间可能存在有故障的物理连接;例如,当首先将从设备54连接到总线64时,可能尚未存在正确的物理连接,且因此在出现正确电子连接之前存在延迟。所有这些状况在重复同步方法950时将被清除或被化解。因此,重复同步方法950提供了更鲁棒的同步过程。这对于同步方法900也可以是同样的。因此,可以存在同步方法900的备选实施例,其中,在操作908处切换到另一操作模式之前在假定的操作模式下重复搜索一次或多次。
现在参见图57,其中示出的是可以与通用同步方法一起用于在统一总线通信协议工作在字模式下时定位和验证同步模式的字模式同步方法1000的示例实施例的图。然而,如果使用如下面更详细描述的时钟选通,则方法1000也可以在工作在比特流模式下时使用。
在1002,初始化方法1000的实例化。针对方法1000的函数调用创建了方法1000的实例化。在1004,对用于搜索、定位和验证同步模式的参数、状态和计数器进行初始化。
在1006,方法1000与时钟同步。换言之,方法1000的剩余动作在总线64的新的时钟循环上开始。例如,动作1006可以被配置为使得:如果时钟信号从低逻辑值上升到高逻辑值(即,上升时钟信号),则执行方法1000的剩余动作。备选地,方法1000可以同步到下降时钟信号。在又一实施例中,设备可以同步到上升沿和下降沿。
在1007,将帧内的当前位置递增。
在1008,方法1000如之前针对方法900和950所述确定总线64上发送数据的一部分与恒定同步部分是否匹配。如果没有匹配,则方法1000进行至1011。如果存在匹配,则方法1000进行至1010。
在1010,方法1000确定计数器状态是否等于0。该状态用于对方法1000在同步过程上进行了多远进行计数。例如,如果状态值等于最大状态值,则实现了同步。如果状态当前等于0,则这对应于恒定同步部分的第一位置,且方法1000进行至1012。如果状态当前不等于0,则这对应于恒定同步部分的后续位置,且方法1000进行至1014。
在1011,方法1000确定是否已获得了至少两个匹配同步符号(即,同步模式),且如果当前搜索是否是帧开始(framestart,即帧的开始)。如果是这种情况,则方法1000将预期在该位置处找到同步模式且存在错误,在该情况下,方法1000将去往1050以检查是否存在错失的同步模式;否则方法1000将去往1070并在返回1006之前检查帧超限(overrun)。
在1012,方法1000将状态设为1,并通过使用确定性方法和当前同步动态部分,来计算针对下一个恒定同步部分来预期的同步动态部分。之前描述了确定性方法的涉及CRC计数器的一个示例。然后,方法1000进行至1070,以检查帧超限然后回到1006以搜索下一个恒定同步部分。
然后在1014,方法1000检查之前是否找到恒定同步部分一次或者当前搜索位置是否在预期帧开始位置处。如果该条件为真,则方法1000进行至1016,其中,将当前位置设为帧的开始。如果1014处的比较为伪,则忽略当前定位的恒定同步部分,且方法1000进行至1070以检查帧超限,然后回到1006。
然后在1018,方法1000检查计算出的动态同步部分和与当前定位的恒定同步部分相关联的动态同步部分是否匹配(在该情况下,术语关联意味着与恒定同步部分相关联的动态同步部分是S字的统一同步模式的一部分)。如果1018处的比较为真,则方法1000进行至1020。如果1018处的比较为伪,则方法1000进行至1028。
在1020,由于在计算出的动态同步部分和定位的动态同步部分之间存在匹配,则方法1000将当前定位的恒定同步部分视为有效,更新帧长度,并计算下一动态同步部分。通过计算包含前一恒定同步部分在内的同步模式的开始与包含当前恒定同步部分在内的同步模式的开始之间的距离,更新帧长度。然后方法1000进行至1022。
然后在1022,方法1000检查状态是否等于最大状态,其是为了实现同步而已成功找到同步字的状态的数量。将最大状态值选择为在较低的伪锁定概率和较长的获得锁定的时间之间的折中。将最大状态参数设为较高数目导致在方法1000可以确定已经定位到足够的同步模式来实现同步之前对方法1000的更多次迭代。因此,如果1022处的比较为真,则方法1000进行至1024,在该点上,已实现了同步。在该情况下,方法1000进行至1070,然后至1006,以通过检查将来的同步模式来维持同步。如果1022处的比较为伪,则方法1000进行至1026,其中,状态计数器递增1。在该情况下,则方法1000进行至1070和1006去搜索下一个恒定同步部分,以为了实现同步而工作。
在1028,方法1000首先检查状态计数器的值。如果已定位到若干有效恒定同步符号,则将忽略当前动态同步符号错误,且方法1000将进行至并保持前一位置为基准(即,上一个定位到的有效同步模式的位置)。下一个动态同步符号将基于与上一个定位到的恒定同步部分相关联的动态同步符号,且不基于与当前定位到的恒定同步部分相关联的动态同步符号(其被视为是无效的)。备选地,如果仅成功定位到一些同步符号,则方法1000将去往1029,其中,将总线64上发送数据的随机性用于向着获得同步而移动。该比较是由于与当前定位的恒定同步部分相关联的动态同步部分与基于与先前定位的恒定同步部分相关联的动态同步部分和确定性方法来计算出的动态同步部分不匹配而进行的。因此,前一恒定同步部分和当前恒定同步部分之一无效,且动作1029尝试确定是将当前恒定同步部分还是前一恒定同步部分保持为有效恒定同步部分。动作1029基于总线业务的随机性(如前面针对方法900和950所描述的,例如通过使用奇偶性)以及状态计数器的值来尝试进行该确定。
如果在1028确定了状态计数器的值接近最大状态值(例如,在一个实施例中状态计数器的值比最大状态值少一,或在另一个实施例中比最大状态值少二,或在另一个实施例中,至少是最大状态值的一半),则方法1000接近实现干部,使得方法1000将当前恒定同步部分视为一次性错误,假定先前定位的恒定同步部分有效且移动到1032,其中,其将状态计数器的值减一,然后通过进行至1006来检查下一恒定同步部分。然而,如果基于1029处的随机性的检查是伪,且状态计数器的值指示方法1000不接近实现同步,则进行随机选择,要么将前一恒定同步位置保持为有效位置,要么使用新的恒定同步位置作为有效位置。然后方法1000进行至1030,并丢弃前一帧长度和状态信息,计算下一个动态同步部分,然后去往1070和1006,以继续搜索下一个恒定同步部分。
现在参见图58a,其中示出的是可以用于处理错失的同步模式并与字模式同步方法1000一起使用的方法1050的示例实施例的图。具体地,方法1050尝试确定同步是否已短时丢失,尝试确定方法1000是否应当初始化其参数以在字模式下寻找同步模式或者尝试确定方法1000是否应当继续使用旧的搜索参数。
在1052,方法1050被调用以处理帧开始处的潜在错失同步符号的情况。
在1054,重置当前帧位置,以覆盖错失同步符号的情况和方法1000重置的情况。
在1056,方法1050确定状态计数器的当前值是否等于最大状态值。如果该条件为真,则有可能刚出现一个错误,其可能是临时的,在该情况下,方法1050进行至1058,其中,将状态计数器的值减1,且计算下一个动态同步部分。然后,方法1050进行至1062,其中,其返回方法1000并继续查看下一个同步模式。然而,如果1056处的条件为伪,则方法1050进行至1060,在该点上,将状态计数器和帧长度参数重置为0,且方法1050进行至1062,其中,其返回方法1000并在依然假定字模式的情况下从开始处重启同步过程。
现在参见图58b,其中示出的是可以与方法1000一起用于检查当前搜索位置是否超过帧或信道的最大长度的方法1070的示例实施例的图(即,方法1070检查帧超限)。
在1074,方法1070确定当前模式是否是比特流模式且当前帧信道搜索是否完成。如果该比较为真,则方法1070进行至1080以重置状态计数器、帧长度和搜索位置。然后,方法1070进行至1082,其中,通过返回调用方法1070的搜索方法来开始新的搜索。如果在1074处的比较不为真,则方法1070进行至1076。
在1076,方法1070确定当前搜索位置是否超过最大可能帧长度。如果该比较为真,则在字模式下未找到同步模式,且方法1070进行至1078。如果在1076处的该比较不为真,则依然存在找到同步模式的可能性,且方法1070直接进行至1082,其中,其返回调用方法1070的搜索方法。
在1078,方法1070将假定的操作模式改变为比特流模式,并通过进行至1080然后到1082来开始新的搜索。
在1080,通过重置当前位置、帧长度和状态值来开始新的搜索。
在1082,方法1070退出并返回调用其的方法。
现在参见图59,其中示出的是可以与通用同步方法一起用于在统一总线通信协议正工作在比特流模式下时定位并验证同步模式的比特流模式同步方法1100的示例实施例的图。
在1102,初始化方法1100的实例化。针对方法1100的函数调用创建了方法1100的实例化。在1104,对用于搜索、定位和验证同步模式的参数、状态和计数器进行初始化。例如,初始化包括定义比特流帧信道的最大数目和最大帧长度。在1106,方法1100如前所述与时钟同步,以让方法1100的剩余动作在总线64的新的时钟循环上开始。
在1108,方法1100如之前针对方法900和950的比特流部分所述确定总线64上发送数据的一部分与恒定同步部分是否匹配。这是通过在当前假定数目的比特流帧信道中以一次一个信道的方式进行搜索来进行的。备选地,在并行实现中,可以同时搜索所有这些信道。
在1110,方法1100确定是否定位到有效恒定同步部分。这可以通过将当前定位的恒定同步部分的动态同步部分与计算出的动态同步部分相比较来进行。如果条件为真,则方法1100进行到1113。如果条件为伪,则方法1100进行到1112。1110处的比较不是在恒定同步部分的第一位置上进行的,在该情况下,假定恒定同步部分有效。
在1113,方法1100基于与当前定位的恒定同步部分相关联的当前动态同步部分和确定性方法来计算下一个动态同步部分。保留比特流定义,且将搜索位置重置为搜索下一个恒定同步部分。
在1114,方法1100确定状态计数器的值是否等于最大状态值。如果是,则实现了同步。然而,方法1100继续搜索同步模式,以确保维持了同步。因此,方法1100移动到1116。方法1100保持当前假定数目的比特流帧信道,并重置搜索位置,以搜索下一个恒定同步部分并进行至1106。
此时,方法1100中的变型包括注意上一个恒定同步部分位于哪个比特流帧信道中,并使用该信息来估计恒定同步部分的下一个位置,以缩短用于下一搜索迭代的搜索时间。这可以在已定位到至少一个恒定同步部分的情况下进行。备选地,这可以在两个或更多帧中的相同帧信道位置上找到恒定同步部分之后来进行。
如果1114处的条件为伪,则方法1100进行至1118,此时,其将状态计数器的值增加1并进行到1106。在该情况下,尽管定位的恒定同步部分有效,尚不存在被定位的足够有效恒定同步部分来实现同步,因此方法1100再一次重复搜索,以搜索下一个恒定同步部分。
在1112,如果尚未找到恒定同步部分,则将假定的比特流帧信道的数目增加1并重置搜索位置。然后方法1100进行到1120,其中,其确定所假定的比特流帧信道的数目是否大于最大比特流帧信道的数目。如果该条件为伪,则方法1100进行到1106,其中,其针对新定义的比特流帧信道数目来搜索比特流帧信道中的同步模式。如果1120处的条件为真,则方法1100进行到1122,其中,其假定操作模式不是比特流模式,切换到字模式并进行到1124,其中,其使用在字模式下搜索同步模式的搜索方法(针对这种方法的示例的描述,参见图57)。
现在参见图60,其中示出的是可以与通用同步方法一起用于在统一总线通信协议正工作在字模式下时定位并验证同步模式的通用同步方法1150的示例实施例的图。
在1152,初始化方法1150的实例化。
在1153,方法1150检查帧超限的概率,即通过调用方法1153(参见图61b)来检查当前最大帧长度内没有遭遇到同步符号。针对方法1153的函数调用在1212处创建了方法1153的实例化。
现在参见图61b,在1214处,方法1153确定假定用于搜索的操作模式是否是比特流模式且是否已经完成了在当前信道中的搜索(这在标志重新同步(resync)被设为真是指示)。如果该条件为真,则方法1153进行到1216,以准备新的搜索。在1216,当前搜索位置(L)设为帧的开始(即,L=0),当前帧的长度(L_old)重置为0且计数器状态重置为0(在比特流模式下,同时递增信道位置)。然后方法1153进行到1222,然后到方法1150的1154。如果1214处的条件不为真,则方法1153进行到1218。
在1218,方法1153确定当前位置是否大于最大帧长度。如果该比较为真(这将仅在当前搜索期间没有遇到同步符号的情况下发生),则方法1153进行到1220,其中,其将假定的操作模式从字模式切换到比特流模式或反之,并设置参数sync_begin=1(这指示了用于初始化比特流同步方法使用的计数器的同步搜索过程的开始)。之后,方法1153进行到1216,以将当前搜索位置(L)重置为帧的开始,并将当前帧的长度(L_old)和状态计数器重置为0。然后方法1153进行到1222,然后进行到方法1150的1154。
再次参见图60,在1154处,方法1150检查重置参数是否被设为真(即1)。如果该条件为真,则方法1150进行到1156。如果该条件不为真,则方法1150进行到1157。
在1156,初始化变量、计数器和参数。例如,在该示例实施例中,变量L_old表示当前帧长度(基于来自前一(些)帧的信息),L表示帧内的当前位置,且状态表示已找到的有效同步模式的数目(尽管状态计数器在值上以最大状态值为界)。CRC表示用于生成动态同步部分的寄存器,且参数sweet_spot表示是否已获得了同步(即,在已获得了同步之后在每个帧的一个始终循环期间sweet_spot=1),bitstream_mod表示该搜索是在字模式下(即,bitstream_mode=0)还是在比特流模式下(即,bitstream_mode=1)进行,且sync_begin表示是否必须从开始处重新开始搜索同步模式(即,sync_begin=1)。为了说明的简单,未在1156处示出一些参数、计数器和变量。在备选实施例中,可以使用其他参数、计数器或变量。在初始化之后,方法1150进行到1157。
在1157,方法1150确定参数clock_gate是否设为真(即1)。该参数用于使得可以在工作在字模式或比特流模式下时使用相同的搜索结构。对时钟选通的使用是节约功率并简化用于实现同步搜索方法的逻辑的方法。时钟选通的好处是可以实现针对每个从设备的相同功耗,而不管多少个从设备尝试与总线64同步。然而,时钟选通在备选实施例中可以是可选的。
在1157处的检查之后,方法1150进行到1158,以等待下一个时钟转换。在另一实施例中,时钟选通可以由时钟启用信号所替代。在该情况下,该检查将在1160之后在进入1164之前。这具有与使用时钟选通相同的优点,即可以将相同的方法用于字模式和比特流模式,但是具有以下缺点:与真正的时钟选通相比,不降低那么多的功耗。其可以在时钟选通不可用的配置中使用。
在1158,方法1150如前所述与时钟同步,以让方法1150的剩余动作在总线64的新的时钟循环上开始。
在1160,方法1150将sync_begin参数设为0。进行该操作以在每个时钟循环期间自动重置该标志,但是当帧格式改变时(参见图61b中的动作1220),sync_begin将被设为真。sync_begin参数用作重置比特流模式下使用的计数器的标志。
在使用时钟选通的情况下,在时钟选通参数设为1时读取发送数据。因此,在字模式下,clock_gate参数通常设为1,但是在比特流模式下,clock_gate参数仅针对发送数据中与正在被搜索同步模式的当前比特流帧信道相对应的那些比特才设为1。这取决于当前正在搜索的比特流信道(B)和当前信道(C,其在每个时钟循环期间改变),它们都从0开始引用。针对比特流帧格式调查的信道的最大数目是Amax,而当前搜索调查具有等于A的数目的信道的帧格式。参数DL用于监视子帧内的当前位置,类似于L,除了使用短格式之外。对于第一比特流帧信道索引(B=0)以及对于当前假定的比特流帧信道数目A(C的位置可以从0到A-1变化),B的值用于获得从发送数据中读取数据的开始位置,且C的值用于跳过此刻不被搜索的信道。在该示例中,在使用时钟选通和比特流模式的情况下,方法1150开始在位置0处读取发送数据,然后向前跳过A个时隙,以读取正在被搜索的比特流帧信道的接下来的发送数据。因此,在该示例中,clock_gate参数针对第0个、第A个、第2*A个等时隙设为1,且针对其他时隙设为0。
在1164,参数sweet_spot设为0且当前位置L递增1。然后方法1150进行到1166。
在1166,方法1150确定在正在搜索的当前发送数据中是否存在针对恒定同步部分的匹配。该动作曾针对方法900和950来描述。如果该条件为真,则方法1150进行到1168。如果该条件为伪,则方法1150进行到1169,以检查是否存在错失的同步符号。
在1168,由于已定位到恒定同步部分,方法1150确定状态计数器是否等于0。如果该条件为真,则这是第一次定位到恒定同步部分,且方法1150进行到1170。如果该条件不为真,则方法1150进行到1172,以检查定位的恒定同步部分有效。
在1169,方法1150确定状态是否至少是2且当前位置与帧长度匹配(如果该方法找到至少两个恒定同步部分(这意味着具有状态值2),将获得了帧的长度)。在该情况下,方法1150预期找到同步符号,但是针对当前帧尚未找到任何同步符号。因此,方法1150进行到1174,其中,其调用错失同步方法1200(参见图61a)。如果在1169处的比较不为真,则方法1150不在预期同步模式的位置上。因此,其不是错误且不存在同步模式。因此方法1150返回主入口点1152,以继续搜索下一个恒定同步部分。
在1170,方法1150将状态计数器设为1(这意味着第一次定位到同步符号),将当前位置L重置为0(这指示了帧的开始)并将计算应当与定位的下一个恒定同步符号相关联的下一个动态同步符号(即,下一个预期的动态同步符号)。基于从总线64上读取的在同步恒量之后的CRC值来计算下一个动态同步符号,并通过使用确定性方法将其递增到下一个值。然后方法1150返回1152以搜索下一个同步模式。因此,重置参数未被设为真,且方法1150进行到1157。
应当注意到:术语恒定同步部分和恒定同步符号是彼此类似的。还应当注意:术语动态同步部分和动态同步符号是彼此类似的。
在1172,方法1150确定其仅定位到单一同步符号还是当前位置与预期帧长度相匹配。如果该条件不为真,则将忽略当前定位的恒定同步符号,且方法1150将返回主循环1152。如果在1172处检查的条件为真,则方法1150进行到1173。
在1173,方法1150将当前搜索位置(L)设为零。然后方法1150进行到1176。
在1176,方法1150确定与当前定位的恒定同步部分相关联的动态同步部分是否等于曾计算出的预期动态同步部分。如果该条件为真,则方法1150进行到1178。如果该条件为伪,则存在至少一个错误且前一恒定同步部分或当前恒定同步部分中的至少一个是无效的。然后方法1150进行到1186以使用随机化在以下二者之间进行选择:找到前一恒定同步符号的位置并忽略当前恒定同步符号,或者使用找到当前恒定同步符号的新位置并忽略前一位置(因为它们不匹配)。
在1178,方法1150将当前帧长度L_old的值设为当前位置L,并基于当前动态同步符号的值和确定性方法来计算下一个动态同步符号。然后方法1150进行到1180。
在1180,方法1150确定状态计数器是否等于最大状态值。例如,当最大CRC索引是15时,最大状态值可以设为7。在另一实施例中,最大状态值可以是15或某个其他整数N。使用值7(或使用大约是可能动态同步部分的数目的一半的值)是在实现同步的时间和同步方法的鲁棒性之间的折中。例如,基于具有15个值的CRC计数器,可以将9个二进制比特用于恒定同步部分,且基于随机总线业务并验证同步模式N次,伪同步状况的可能性(即,基于伪同步模式来实现同步)是(2-9N)*(15-N)。然而,如果存在与同步符号匹配的随机静态总线业务,则该状况发生的可能性是15-N。对于N=7的情况,伪同步的可能性最多是5.9*10-9,但是通常远低于此。
如果1180处的条件为真,则已实现了同步且方法1150进行到1182,其中,sweet_spot参数设为1以指示从设备54当前与主设备52和总线64同步。该标志可以由从设备54中的其他逻辑用来跟踪内部时序。为了找到子帧长度,可以将帧长度除以因数三。然后方法1150进行到1152,以继续搜索将来的恒定同步部分来维持同步。
如果1180处的条件不为真,则尚未实现同步,且方法1150进行到1184,其中,将状态计数器递增一。然后方法1150进行到1152以搜索下一个恒定同步部分,并继续尝试实现同步。
在1186,存在动态同步部分错误且因此先前定位的恒定同步部分或当前定位的恒定同步部分中的至少一项无效。然后方法1150确定状态计数器是否小于4且奇偶性是否等于0。如果状态计数器是4或更高,则方法1150已经成功定位到若干恒定同步部分,且在同步期间将允许单一错误。然而,方法1150通过减少状态值将先前定位的同步位置视为较不可信。如果1186处的条件不为真,则随机成分(例如,但不限于,奇偶性比特)指示方法1150应当维持上一个同步位置(例如,奇偶性等于一)作为有效位置,或者应当将当前同步位置(例如,奇偶性等于零)保持为有效位置。注意到:值4实际上是中间状态值,其近似于最大状态值除以2(在本示例中,最大状态值设为7)。在其他实施例中,其他值可以用于最大状态值和中间状态值。只要存在连接到总线64的具有物理性质的某种事物(即,提供测量数据的传感器或提供电压或电流测量的模数转换器),则由于数字化过程,针对出现在总线64上的比特将存在随机成分,使得奇偶性的值在帧与帧之间是随机的。该波动是由量子物理学来保证的,因为波动耗散定理(fluctuation dissipation theorem)保证了具有耗散的任何系统的波动。因此,除非所有总线业务由确定性的状态机生成,否则奇偶性将是真正随机的。此外,在其他实施例中,由于在帧期间发送的0和1的数目都是随机的,因此可以检查奇偶性以查看其是否等于1。如果1186处的条件为真,则方法1150进行到1188。如果1186处的条件为伪,则方法1150进行到1190。
在1188,方法1150拒绝先前定位的恒定同步部分并重置若干变量和计数器的值。方法1150现在将使用当前位置作为帧的开始。帧内的当前位置(L)、计算出的帧长度(L_old)和状态计数器均被重置。基于从总线64读取的上一个动态同步部分使用确定性方法来计算下一个动态同步部分。这等价于说不存在关于帧的信息,且假定帧在当前位置上开始。方法1150进行到1152,使得同步过程可以从开始处重新开始。
在1190,方法1150接受先前定位的同步部分有效并减少状态计数器。这指示了方法1150如之前指示的在当前位置上较不可信,因为在若干次之前的成功检查之后遭遇到了动态同步部分检查中的错误。然后基于确定性方法和曾定位到的前一动态同步部分(而不基于从总线64刚刚获得的动态同步部分)来计算下一个动态同步部分的值。然后,方法1150进行到1152以找到下一个恒定同步部分。
现在参见图61a,其中示出的是可以用于检查丢失同步模式和可以与方法1150一起使用的同步方法1200的示例实施例的图。
方法1200基本上确定是否存在错误以及是否尚未实现同步,然后同步过程是否必须从开始重启。否则,如果在错误发生之前实现了同步,则方法1200将状态计数器减一,且将搜索下一个同步符号就好像什么也没发生一样,而不是从开始处重启整个同步过程。
由于方法1200预期同步符号,但是并未找到任何同步符号,则在1204处将当前位置重置为0,即即使上一个定位的恒定同步部分有错误(例如,由于总线64上的噪声),方法1200也假定帧在当前位置处开始。这将适用于总线64上的任何数据错误,但是不适用于时钟信号上的小错误。
在1206,方法1150确定从设备54是否与主设备52处于锁定状态。如果处于锁定状态(状态=最大状态),则允许单一错误且在1208将状态值减少。在该情况下,基于总线64上的前一CRC值(而不基于看起来错误的总线64上的当前CRC值)来计算下一动态同步部分。从而,更新前一CRC值。如果该值与总线64上的当前CRC值不匹配,则再一次更新该更新过的CRC,以与下一个读取的CRC进行比较。该方案允许单一CRC错误,同时维持同步(假定仅恒定同步部分有错)。然后该方法1150进行到122并返回主搜索方法1150的1152。
在1210,存在多于一个错误或者从设备54尚未与主设备52同步。因此,通过重置特定参数来再次重启搜索方法,因为这些状况对于有效同步位置将不发生。然后方法1150进行到1211并返回主搜索方法1150的1152。
现在参见图62,其中示出的是可以与方法1150一起使用的比特流模式同步方法1250的示例实施例的图。
在1252,初始化方法1250的实例化。针对方法1250的函数会调用创建了方法1250的实例化。
在1254,方法1250确定重置参数是否设为真(即,1)。如果该条件为真,则这意味着用于在比特流模式假设下搜索同步模式的所有参数、计数器和变量被重置为其初始值,使得方法1250进行到1256。否则,如果1254处的条件为伪,则方法1250进行到1258。
在1256,对在比特流模式假设下用于搜索、定位和验证同步模式的参数、状态和计数器进行初始化。例如,初始化包括定义当前假定的比特流帧信道数目(A)、指示当前正在被搜索的信道的信道计数器或索引(B)、经历所有信道以激活用于被搜索的信道的时钟选通的计数器(C)以及比特流信道内的当前位置(DL)(其类似于帧内的当前位置(L))。由Amax来定义最大允许的信道数目,且在一个实现中其可以等于16。然后方法1250进行到1258。
从值0开始引用A、B和C变量,使得将当前比特流帧信道数目设为8意味着A=7。这样做是为了节约寄存器空间。为了理解如何使用这些变量,假定存在最大数目3个比特流帧信道,因此Amax=2。然后将计数器设为A=0,B=0,C=0和DL=1。这意味着当前假定1个比特流帧信道(A=0),被搜索同步模式的当前比特流帧信道是第一个比特流帧信道(B=0),经历所有信道的计数器在第一位置上开始(C=0)以及发送数据中的开始位置是0(DL=1)。
方法1250通过以下方式工作:系统性地经历比特流帧格式的所有可能结构并尝试在每种假定的帧格式的任何允许信道中获得同步。方法1250将连续递增信道索引计数器C,这指示了当前正在总线64上发送哪个比特流信道。当C等于针对帧格式定义的信道数目(A)时,其被重置且通用搜索方法1150将捕捉到单一比特,即从总线64上的复用信号中取出单一比特,并假定其属于包含同步的帧信道。同时,将信道内的当前比特位置(DL)推进一。如果在该信道中未获得同步,则将被搜索同步模式的当前信道(B)递增一。如果B等于当前信道数目A,则针对当前假定的帧格式的当前假定的信道数目完成了搜索,且将A递增一。如果A等于Amax,方法1250已在所有格式和所有信道中进行了搜索,否则将递增C、DL、B和A(以该特定顺序),以在另一信道中搜索同步模式。
在1258,方法1250如前所述与时钟同步,以让方法1250的剩余动作在总线64的新时钟循环上开始。如前所述,同步可以要么在上升沿、要么在下降沿或在这两种时钟沿上都进行。
在1260,参数re_sync设为伪(即,逻辑值0)。这表示主搜索方法1150的搜索以未被中断的方式进行。当该参数设为真时,当前搜索位置L和当前帧长度L_old都被重置为零。这发生在以下情况中:在正在被搜索的当前比特流信道中未找到同步符号。然后方法1250进行到1262。
在1262,方法1250确定参数bitstream_mode是否设为真(即,逻辑值1)。如果该条件为真,则方法1250进行到1266。如果该条件为伪,则什么也不发生,且方法1250返回比特流入口点1252。这样做使得所有变量处于明确定义的状态,且这还降低了电流消耗。在一些实施例中,可以将其省略。在备选实施例中,在1262处执行的检查也可以在方法1250中更早地进行。
在1266,方法1250确定参数sync_begin是否设为真(即1)。如果该条件为真,则这意味着针对同步模式的搜索在比特流模式下在非常开始处开始。方法1250进行到1268,其中,计数器和参数被重置为其初始值,以假定仅存在一个比特流帧信道,在该情况下,针对同步模式的搜索开始于第一比特流帧信道的第一个比特。如果1266处的条件为伪,则针对同步模式的搜索过程不在最开始处开始,且方法1250进行至1270。
在1270,方法1250确定当前有效比特流信道(C)是否不等于正在被搜索的当前假定比特流信道的数目。如果条件为真,则方法1250进行至1272,此时,将当前有效比特流信道递增1(即,下一个信道对于搜索目的是有效的)且方法1250进行到1252,此时针对同步模式的搜索是通过在当前有效比特流信道等于当前正在被调查的信道(即信道B)之前进行等待来执行的。
如果1270处的条件为伪,则这意味着当前有效的比特流帧信道是正在被搜索的信道。在该情况下,针对主搜索方法1150的时钟将被启用,或者将逻辑启用标志加以设置,以使得方法1150能够进行。因此,方法1250进行到1274,此时,再次在零处开始有效信道(C),使得该方法可以确定接下来搜索有效信道的时间。同时,将被正被调查的帧信道内的位置推进1(DL=DL+1)。这类似于在主搜索方法1150中对当前位置L的递增。然后在1274,方法1250启用了要由主搜索方法1150来检查的发送数据的一个比特。然后方法1250进行至1276。
在1276,如果在当前有效帧信道中找到同步模式,则方法1250进行到1278,此时,存在处于同步的可能性。然后在1278,将当前位置计数器初始化为初始位置,例如128,但是其也可以是某个其他值,例如0。在1276处的比较可以与之前针对方法900和950描述的相同,以确定锁定为的同步部分是有效同步部分。此时如果找到一个同步符号,则参数DL可以被设为大数以允许方法1250搜索更长时间。然后方法1250进行到1252,以从复用数据流中读入下一个比特。然而,如果1276处的条件不为真,则方法1250进行到入口点1302,以调用将在剩余比特流帧信道中循环的方法。这可以通过诸如针对图63描述的方法1300之类的另一方法来实现。
现在参见图63,其中示出的是可以与比特流模式同步方法1250一起使用的比特流更新方法1300的示例实施例的图。
在1302,初始化方法1300的实例化。针对方法1300的函数调用创建了方法1300的实例化。
在1304,方法1300确定当前比特流开始位置DL是否在最大位置(其等价于大于最大帧长度)以及allow_changes参数是否为1(即,逻辑真值)。如果该条件为真,这意味着搜索方法必须依然实现同步且方法1300移动到1306。这意味着在当前帧信道中没有获得同步。在一些实施例中,最大位置可以是值127。如果DL的初始值设为128,且使用具有环回(wrapping around)的二进制计数,则这是要达到的最后一个值,但是在其他实施例中也可以使用其他最大值。如果1304处的条件为伪,这意味着方法1250未完成对当前帧信道的检查。在该情况下,方法1300移动到1318,然后回到比特流搜索方法1250,以从正在被调查的当前帧信道中读入更多比特。
在1306,re_sync参数设为1(即,逻辑真值)且参数DL设为0,但是其也可以被设为某个其他初始值。这意味着在当前比特流帧格式中未找到同步模式且应当尝试下一个比特流帧信道。通过将参数re_sync设为1,参数L和L_old将在主搜索方法1150中被重置,由此开始新的搜索。然后方法1300进行到1308。
在1308,方法1300确定正在被调查的当前帧信道(B)是否不等于假定的帧信道的数目(A)。如果该条件为真,则尚未调查当前假定数目的信道内的所有信道。则方法1300进行到1310,其中,将正在被调查的当前帧信道增加一。通过在1318调用方法1250在下一帧信道中搜索同步模式。如果在1308处的条件为伪,则方法1300已经经历了具有当前假定的帧格式的所有信道位置。参数A指示了当前假定的帧信道数目。在该情况下,假定的信道数目(A)将最终递增一。方法1300进行到1312,其中,将正在被调查的当前帧信道重新初始化并设为0。然后可以搜索新的假定数目的信道内的第一个比特流帧信道。然后方法1300进行到1314。
在1314,方法1300确定当前假定的比特流帧信道的数目(a)是否不等于最大允许的比特流帧信道的数目(Amax)。如果条件为真,则方法1300进行到1320,其中,将当前假定的比特流帧信道的数目增加一,然后方法1300进行到在具有新假定的帧格式的第一帧信道中进行搜索,并在1318处调用方法1250。如果1314处的条件为伪,这意味着已经搜索了所有允许的比特流帧格式中的所有位置,且尚未找到同步模式。则方法1300进行到1316,其中,将当前假定的比特流帧信道的数目设为0。然后方法1300初始化帧内的当前位置(L)和帧长度(L_old)并反转操作模式(即,从比特流模式到字模式)。然后方法1300进行到1318,然后到搜索方法1250的1252。在字模式下,方法1250依然运行,但是因为比特流模式为伪(见1262处的判定),因此以更低的功耗运行。比特流方法1250和时钟选通字模式方法1150可以并行运行(即,实现或执行)。
现在参见图64,其中示出的是快速重新同步方法1350的示例实施例的图。快速重新同步方法1350可以在已经实现了同步且依然使用同步方法以维持同步时使用。例如,方法1350可以与方法1150和1250并行运行或执行。
在1352,初始化方法1350的实例化。针对方法1350的函数调用创建了方法1350的实例化。
在1354,方法1350确定重置的参数是否被设为真。如果该条件为真,则方法1350进行到1356,此时参数allow_changes设为1(即,真)。然后方法1350进行到1358。然而,如果1354处的条件不为真,则方法1350进行到1358。
在1358,方法1350如前所述与时钟同步,以让方法1350的剩余动作在总线64的新的时钟循环上开始。
在1360,方法1350确定状态计数器的值是否等于最大状态值或最大状态值-1(其可以设为例如6&7)以及针对同步模式的搜索是否工作在比特流模式下。这将当前状态值与两个不同状态值进行比较,以允许同步中的单一错误。如果这为真,则方法1350进行到1362,其中,将参数allow_changes的值设为0(即,伪),这意味着已实现了同步且即使某些错误出现也应当维持当前状态。这意味着即使错误出现在比特流模式下,同步方法将不立刻脱离锁定。该条件由allow_changes参数所涵盖并相应动作(换言之,不允许同步方法基于单一错误立刻从假定其在比特流模式下变回假定其在字模式下)。然后方法1350进行到1352以继续监视状态值的任何改变。然而,如果1360处的条件为伪,则方法1350进行到1364。
在1364,方法1350确定搜索是否超过当前帧长度或者针对同步模式的搜索是否工作在字模式下。因此,1364处的条件可以用于找到以下情形:多于一个错误已经发生,或者同步搜索方法工作在字模式下。如果1364处的条件为伪,则方法1350进行到1352。如果1364处的条件为真,则方法1350进行到1366,此时allow_changes参数设为1,使得如果没找到同步符号,则B和A的当前值可以被改变(在方法1300的动作1304之后)。
现在参见图65,其中示出的是可以与本文所述的方法1150、1250和1350一起并行使用的时钟选通方法1400的示例实施例的图。如前所述,时钟选通或时钟启用用于控制主方法1150,使得其在字模式下始终捕捉总线活动,且使得其在比特流模式下仅在正在监视当前帧信道的时间期间才捕捉总线活动。
在1402,初始化方法1400的实例化。针对方法1400的函数调用创建了方法1400的实例化。
在1404,方法1400确定重置参数是否已设为真。重置参数要么由上电重置信号来设置,要么由外部事件(例如,由总线控制器发起的受控重置事件)来设置。如果该条件为真,则方法1400进行到1406,此时clock_gate参数设为1,这意味着缺省状况是在正使用方法1400的搜索方法中应当启用时钟。然后方法1400进行到1408。如果1404处的条件为伪,则方法1400直接进行到1408。
在1408,方法1400如前所述与时钟同步,以让方法1400的剩余动作在总线64的新的时钟循环上开始。
在1410,方法1400确定复用比特流信道内的当前位置(C)是否等于正在被监视的当前信道或者该方法是否正工作在字模式下。在这两种情况下,针对方法1150均应当启用时钟。如果1410处的条件为伪,则方法1400进行到1414,此时参数clock_gate设为0,这意味着时钟被禁用,且方法1150在后续时钟周期期间是空闲的,并忽略总线上的当前数据。在完成动作1412或1414时,方法1400回到1402,以检查操作模式(即,比特流模式或字模式)或C和B的值是否改变。在每个时钟循环中这样做,因为C和B可以在每个时钟循环中改变值。
还有可能在无线链路上使用本文所述的统一总线通信协议的至少一个实施例。在该情况下,可以将无线链路或无线接口视为总线。其特别适用于延迟低(例如,对于高速短距链路,如,类RF-ID的链路或无线扩展坞(docking station))或通信速度不高且受限于较长传播距离的配置。例如,可以在低功率磁链路系统中使用通用总线通信协议的至少一个实施例,其中,主设备发送调制载波信号并利用如针对单线总线实施例描述的相同时隙系统。从设备将对RF信号进行整流并使用该整流信号的包络作为“总线信号”,以导出时钟和数据信号,如图66所示。为了让从设备向主设备返回通信,其可以将单独的发射机用于远距链路,但是对于简单的磁链路,其可以简单地加载发送载波信号。类似于单线总线情况,对发送载波信号的加载可以用作向主设备返回通信的具有相同优点的机制,即接收机可以从发送载波信号中直接取回时钟和数据。此外,协议和硬件实现起来相对简单。对载波信号的发送和加载可以通过使用两个小的线圈来实现,例如实现为主设备和从设备中的一部分PCB上的多个圆形匝(circular turn)。这些PCB线圈的匝的间距和数目可以被增强,以利用绕组之间的固有寄生电容将这些线圈调谐到特定工作频率。在备选实施例中,两个耦合的发送线路可以用于高频操作和高速数据传输。所发送的载波信号通常将具有远高于数据带宽的频率,例如,433MHz,或者2.4GHz载波信号可以用作载波,且3.072MHz或19.20MHz频率可以用作高质量立体声音频的传输速率。在一些实施例中,可以使用高得多的载波频率,例如24或60GHz,特别是在可以传输例如高清视频之类的宽带数据的情况下。可以通过紧密耦合的发送线路来发送这些信号。此外,如果接收机的功率要求低,则有可能通过来自(从主设备发送的)发送载波信号的功率为该设备供电,实现与RF-ID设备类似的功能,但是具有更高带宽和更多功能的可能性。这实现了身份信息的传输或大量信息(例如文件、音频、图片或电影)的传输。在一些实施例中,可以在给定时钟转换之后且在下一个时钟转换之前传输多于一个数据比特,以实现更高的数据带宽。通过对数据加密,可以获得安全的数据处理。
本描述的以下章节讨论了统一总线通信协议的其他示例实施例,其中,进行了修改以实现一个或多个好处。
现在参见图67,其中示出的是可以用于同步字(在其他情况下也称为S字)的字段和比特分配的另一示例实施例的图。对于该S字,IRQS比特(S15)是第一比特(或第一时隙),奇偶性比特(S14)现在是第2比特(或第二时隙),且ACK比特(S0)现在是最后一个比特(或在总线64上发送S字的最后一个时隙)。该S字格式的剩余部分类似于图7所示的S字格式,且将不讨论。
在示例实施例中,在上电时的S字的缺省值可以是“0010.1100.0111.1110”=0x2C7E。这等价于以值“1111”来开始伪随机序列。
应当注意:在使用S字的该不同配置的情况下,因为图67的S字中的不同比特排序,本文描述的很多示例帧格式将改变,例如在图40至44中示出的那些。
如果从设备有重要的状态消息要发送,IRQS比特的用途是推迟读取或写入或功能操作。该状态消息可以通过激活IRQS比特来发送。如果没有从设备激活该IRQS比特(在本示例中,逻辑电平“1”意味着激活)或者如果通过S15延迟掩码来禁用IRQS中断功能,则读取或写入或功能操作将继续进行。如果从设备具有状态等级等于“10”或“11”,则激活该中断。为了生成该中断,在IRQS比特在总线上发送的时隙期间,从设备可以复制其状态寄存器的MSB的内容到总线64上。如前所述,表7示出了对于若干命令操作的各种组合出现的帧动作以及IRQS和S0延迟比特的值。
在至少一个实施例中,IRQS比特还可以用于进入极低功率模式,因为中断可以出现在S字的开始,而不是如图5的S字的情况一样出现在S字的结束。因此,在使用图67的S字的情况下,连接到总线64的设备可以被配置为就在S字的开始处进入睡眠模式,这发生在帧的开始处。当进入睡眠模式时,时钟信号将被禁用且时钟线的值将处于静态逻辑零值或静态逻辑一值。
在至少一个实施例中,IRQS比特还可以用于在低功率关机期间唤醒总线64。在该情况下,时钟信号将留在高或低逻辑值状态且数据线中的任何改变将恢复时钟信号的操作(即,时钟信号将不再保持在静态值)。可以驱动数据线,直到时钟信号具有已改变的状态其且已变为有效为止。在其他实施例中,从设备54可以通过激活时钟线本身来唤醒总线64;在该情况下,在下电模式期间主设备54将时钟线留在弱驱动静态状态下,这可以通过使用总线保持器驱动时钟线来进行。
如之前针对图7的S字所述的方式来计算PAR比特,且此处将不讨论。
如之前所示计算应答比特ACK,即基于上一帧中的总线业务。然而,现在差异是:在PAR比特之后很久在总线64上发送ACK比特。这是有利的,因为其允许较慢的从设备用更多的时间来基于其奇偶性计算和与PAR比特的比较来计算ACK比特。这点的示例在图68中示出,图68是示出了字模式下针对图67的S字的数据操作的另一示例时序图。主设备52在比特S14中写入奇偶性值,然后从设备54计算奇偶性值并在其分别等于或不等于由主设备52计算出的奇偶性值的情况下在14个时隙之后响应以ACK或NACK。
在备选实施例中,可以修改X字的字段,使得地址字段的地址12~14可以用于使用选择组地址功能来同时对若干设备编程。然后可以写入被指派给该组地址的所有设备,以使用单一写入操作,针对总线64增加时间效率并增加功率效率。可以通过设置组地址(组)的值为15来针对特定设备禁用组地址,这等价于向连接到总线64的所有设备上进行广播,这在本示例实施例中由设备所支持。类似地,缺省组地址可以是15,其指示了在上电时设备将不属于特定设备子组。
在至少一些实施例中,可以对X字的地址字段进行的另一修改是:与总线64上所有其他数据相比,以反向顺序对地址字段进行编码。在该情况下,X7是地址比特0且X0是地址比特7(其是图9a所示的X字的反向)。该反向排序允许在不使用比特7的情况下从设备具有更长的内部访问时间。在该情况下,在8比特地址模式下,仅前128个字可被编程(16比特数据)。
以类似的方式,在将反向排序用于X字中的地址比特的这些实施例中,还可以将反向排序用于Y字中的地址比特,其中,Y字中的八比特地址字段可以与X字的地址字段一起用于形成16比特地址。为了反向排序,Y15是比特8且Y8是比特15。该地址字段中的反向排序允许从设备在不使用地址比特15的情况下具有更长的内部访问时间。换言之,在向从设备请求地址上的值,例如在读取操作中请求地址上的值,如果所请求的地址是在可以用15比特而不是16比特来表示的地址值,则从设备将具有更多的时间用来响应,因为由于用于X和Y字中地址字段的反向排序,设备首先接收LSB。然后假定MSB为零。在该情况下,从设备将多1个时钟循环用于响应。在该示例中,寄存器映射被限制为16比特地址模式下的32kbytes(8比特数据)。
现在参见图69a,其中示出的是针对统一总线通信协议的示例实施例的主设备或从设备可以使用的寄存器定义的另一示例。这些寄存器是图16a所示的寄存器布局的备选。在本示例实施例中,可以看到将第2个和第3个寄存器加以调换。该布置的优点是:在使用16比特和8比特数据时针对寄存器的编程序列都是顺序进行的,即首先对寄存器2编程,然后对寄存器3编程,然后对寄存器4编程且依此类推,而不是使用稍微无序的变成序列,即更新寄存器={3,2,4,5,6等}。
另一改变是:可以使用DIR字段而不是图16a的IRQF掩码字段。当DIR字段为零时,端口方向是输入(即,将向设备传输来自总线64的数据)。如果来自设备的端口不支持输入,则从总线64上将不获取数据,且设备将不启用输出。当DIR字段为一时,端口方向是输出(即,将向总线64传输来自设备的数据)。如果端口不支持输出,则不向总线64写入数据。如果使用双向端口,将其要么用作输入要么用作输出,但同一时间不既作输入也作输出。包括该比特的优点是:这实现了对使用单一端口对双向连接的支持。在一些实施例中,DIR比特可以被单向端口所忽略。
此外,在该示例实施例中,寄存器0x05用于子组和重复字段,而寄存器0x06用于同步和信道长度字段。寄存器0x07现在用于将来扩展(FUTURE EXPANSION)字段和跳过字段。寄存器0x08现在用于帧结构字段(其与图29a和29b的命令分隔字段相同)。最终,寄存器0x09用于PCLKD字段和TDM比特列字段。具有与图16a、16b、29a和29b的类似名称的字段具有相同的功能且将不再进一步讨论。在图69a的示例寄存器定义中包括附加寄存器比特的优点是:对寄存器的编程更加简单且允许重复和子组的更多组合。
在本示例实施例中,将将来扩展字段预留用于将来的功能。
在本示例实施例中,现在使用现行编码对子组字段进行编码,者实现了将数据信道分组在一起的更多组合。
TDM比特列字段在比特流模式下用于指示在哪列(0~15)中TDM数据开始传输。TDM数据的开始由开始字段定义,且在垂直方向上给出。开始字段定义了在开始数据之前跳过的行数,以四行为单位给出。命令字的结束依然用作基准,即使在不包含控制字的列中也如此。还允许向不包含命令字的列的任何位置进行写入。例如,在本示例实施例中,在列零中(包含命令字的列中),不允许在包含命令字S、X&Y的位置上写入其他数据。从设备54应当自动禁用这些位置的输出,以避免由于编程错误对使得总线64崩溃。
在本示例实施例中,由于帧结构字段现在被包括在较早的寄存器中,其不被包括在图29a所示的较晚的寄存器中;然而,图29a中所示的寄存器表的其余部分可以在本示例实施例中使用。
现在参见图69b,其中示出的是可以针对每个端口的重复传输多少个信道的定义。通过改变子组参数,有可能将来自两个或更多个端口的输出合并,且由此降低端口之间的数据发送的时延。作为示例,两个端口可以通过一次发送一个信道来合并它们的输出(子组=0)。这样,总线64上的采样对于每个输出采样可以在两个端口之间交替。
现在参见图69c,其中示出的是将设备指派给一个设备组地址的系统1500的示例实施例的图。系统1500包括基带处理器1502(其包括存储器1504)、数字信号处理器(DSP)1506和主设备1508。系统1500还包括四个麦克风1510~1516。在本示例中,四个麦克风1510~1516被指派给设备组1,设备组1被指派有地址12。
现在参见图69d,其中示出的是将设备指派给三个设备组地址的系统1550的示例实施例的图。系统1550是使用统一总线通信协议的移动电话系统的示例实施例。系统1550可以是例如蜂窝电话或智能电话。系统1550包括基带处理器1552、编解码器1554、FM无线电设备1556、右信道D类放大器1558、左信道D类放大器1560、蓝牙模块1562、IR传感器1564、容性传感器1566、四个麦克风1568至15574和两个总线1576和1578。总线1576耦合到元件1552至1566,且总线1578耦合到元件1552、1554和1568至1574。在该示例中,总线1576和1578是如前所述使用双线总线实施例来实现的。此外,在本示例中,基带处理器1552担当主设备且其他元件1554至1574担当从设备。可以存在使用多于一个总线的应用,以使得系统更节约能量,因为当很多设备耦合到相同总线时,容性损耗增加且能量效率减少。此外,不同的总线可以具有不同的时钟速度,且较低的时钟速度更为节约能量。统一总线通信协议的另一方面是:其可以用在将低成本数字附件连接到系统1550的总线上。此外,通过将设备连接到分离的总线,时钟速度可以不再必须基于所有设备使用的所有带宽的总和来确定。这也应当允许更低的功耗。
对于系统1550,存在用于耦合到总线1578的四个数字麦克风1568至1574的设备地址组1和用于耦合到总线1576的若干设备的设备地址组1和2。设备地址组1和2分别对应于设备地址12和13。麦克风1568至1574、右信道D类放大器1558和左信道D类放大器1560被指派给设备地址组1。容性传感器1566和IR传感器1564被指派给第二总线的设备组2。如前所述,可以向每个设备地址组中的设备并行给出命令,以对设备并行编程,这减少了代码行,将用于编程的执行时间减少了大致相同量。该设置允许主设备1552快速设置立体声回放情形,控制多个传感器,或同时控制所有麦克风的增益。
现在参见图70,其中示出的是功能和示出了可以在X字中设置的对应比特设置的另一示例列表。这些功能中的大多数类似于图11a所示的功能,尽管这些功能中的一些功能的顺序可能改变。此处将不讨论类似的功能,但是将讨论新功能选择组地址(SELECT GROUPADDRESS)和反转有效堆组(INVERT ACTIVE BANK)功能。
对选择组地址功能(X3:X0=0011)的执行可以用于向任何设备指派备选地址。数据字段(Y1:Y0)中的至少两个比特将选择实际地址,且可以从12至15中选择(例如,如果Y1:Y0=10,则选择组地址14)。在本示例实施例中,可以同时设置的完全单体设备地址组的最大数目是三{12,13,&14};然而,在备选实施例中这可以改变。缺省组地址是15。
选择组地址(SELECT GROUP ADDRESS)功能可以用于通过首先将它们设置为具有相同组地址且之后设置端口寄存器对若干设备同时快速编程。这些设备依然可以使用其自己的在请求ID功能期间编程的原始地址来寻址。广播命令(即,设备地址15)将依然工作,即使在本示例实施例中已向设备指派了不同的组地址也依然如此。选择组地址功能可以用于将相同或相似设备分组在一起,它们可以同时接收相同命令。例如,当对数据信道编程时,接收机和发射机信道可以被编程为使用相同时隙。通过向具有这些接收机和发射机信道的设备指派备选设备组地址,有可能同时对这些设备进行编程。这是更有效率的,因为其将允许多个设备(例如,多个扬声器或多个麦克风)同时设置。
在使用选择组地址功能的情况下,设备的单体设备地址字段不一定改变,而是针对多个设备(即,一个或多个设备组)来分配一些设备地址。由于可以存储给出了当前组地址的仅两个比特(11将缺省为广播地址)且可以将很多现有逻辑重复使用,因此减少了实现这种方法的门数开销。
在本示例实施例中,在PING操作期间,当前未监视设备地址12~15。然而,设备地址15已被指派为具有广播功能,因为当使用设备地址15时向所有设备发送命令。这使得设备地址12~14留用作设备组地址。两比特寄存器可以用于指示已被指派到特定设备的设备组地址。应当注意:设备组地址不一定被指派到特定设备,而是将缺省为地址15。
如何使用设备组地址的示例现在将如下所述。可以向麦克风和比特流接收机都指派第一设备组地址。然后可以使用相同命令对向第一设备组地址指派的设备进行编程。然后可以启用麦克风。然后可以启用比特流接收机。这导致了对这些设备更快速的设置。在该示例中,可以用近似一半数量的代码行来进行设备编程。
对反转有效堆组功能(X3:X0=0100)的执行可以用于改变有效对组,而不使用当前堆组比特。为了对单一设备编程而不必须对连接到总线64的在备选堆组中具有当前配置的所有设备编程,这是有用的。LSB(Y0比特)将确定有效堆组,即Y0=′0′,则有效堆组是由在PING命令期间发出的当前堆组比特来确定的,且如果Y0=′1′,则有效堆组是由当前堆组比特的反转值来确定的。
本文描述的统一总线通信协议的各种实施例还可以与通用异步接收机/发射机(UART)控制器一起使用。UART控制器用在串行通信中,例如,第一UART控制器可以用顺序方式一次一个比特地发送数据字节,且第二UART控制器可以接收这些比特并将它们重新组装为原始数据字节。该串行通信可以是同步或异步的。
UART控制器可以用于各种应用。例如,UART控制器可以用于经典串行接口,用于蓝牙接口或蓝牙调制解调器,用于FM接收机,用于WiFi组件(所使用的带宽可以变化),用于USB(可变带宽)通信,用于触摸板传感器,用于低数据速率传感器,以及用于具有可变数据输入或输出的任何组件。UART通常包含FIFO结构,以补偿实时系统中的有穷时延。
通常的UART控制器具有若干输入或输出管脚,包括时钟信号管脚、读取命令管脚、写入命令管脚、数据(0~7)管脚和IRQ中断管脚。在一些实例中,如果以串行格式发送数据,则这可以减少为四个管脚(CLOCK,TX DATA,RX DATA和IRQ)。
通常希望UART控制器具有低功耗。然而,为了获得低功耗,很多系统在空闲周期期间将时钟信号绑定为静态值,例如,逻辑低值或逻辑高值。在时钟信号上没有活动的情况下,功耗可以非常低。当时钟信号有效时,实际功耗由负载循环来确定。这是由使用的数据带宽来直接确定的。
作为示例,SLIMbus协议涉及连续运行时钟信号或以未知时延来重启时钟。这导致连续时钟要求并因此由于要求不丢失任何数据而导致UART控制器的高电流消耗。因此,SLIMbus总线不适用于低功耗和UART用途。
为了实现低功耗,可以针对UART控制器来使用单独的线。这意味着可以使用本文所述的统一总线通信协议的至少一个实施例来实现两个端子的端子价格数目。然而,通常的UART组件具有若干更多的端子(即,clk,data_in,data_out,IRQ等),因此即使向UART控制器分配专用总线,也依然存在某些节约空间。
此外,为了实现低功耗,在统一总线通信协议的至少一个实施例中,总线64将被设为时钟空闲模式,且其在UART控制器中的缓冲区达到特定预定阈值时醒来。该阈值通常可以被编程为特定值,该值在缓冲区大小的0和100%之间。之后,在每个帧中传输一定数目的采样,例如1~3个,直到UART缓冲区低或空为止。
在一些实施例中,时钟信号可以在两个频率值之间改变,以既支持等时数据,有时也支持UART数据,且在其他实施例中,时钟信号将在UART FIFO具有新数据之前完全停止。
UART控制器可以用于仅偶尔发送数据,这可以发生在系统工作在空闲模式或睡眠模式下时。当不频繁地发送数据时,可以减少时钟频率,其将降低功耗。此外,当减少时钟频率时,也减少带宽。然而,当可能必须发送更多数据时,则可以增加时钟频率且可以将系统带出较低功率模式。
该方法还可以用于自动带宽控制。在该情况下,允许发射机在每个帧中改变当前堆组比特。当当前堆组比特设为高时,主设备52可以使用比其设为低时更高的时钟频率,且该改变可以与寄存器的改变同时发生。这允许UART控制器根据可以使用的带宽来动态控制总线64的频率。在比特流模式下,可以固定时钟频率。
存在可以用于减少功耗的各种其他方法。例如,外部物理层经常是限制因素。因此,一个减少功耗的有效方法是使用多个总线。在一个实施例中,比特流麦克风可以将单独的数据线用于右和左麦克风,而不是将数据复用在公共数据线上。通过这样做,可以近似将外部功耗减掉一半,因为时钟线现在可以以一半频率来运行,且容性损耗更低,因为每个数据线仅由来自单一麦克风的信号来驱动。在一个实施例中,对该MONO模式的改变可以通过以下方式来确定:将左/右端子设为第三状态(例如浮置),且利用图11e的电路来确定连接。在该情况下,如果输入端子浮置,则麦克风可以作为单声道麦克风来连接(在两个时钟半周期上都驱动新数据)。该配置实现了与所有现有系统的兼容性。
在一些实施例中,时钟信号可以用于驱动内部多电平∑Δ转换器,例如,三电平转换器,然后在取决于选择的立体声或单声道模式下在总线上发送数据之前将该多比特信号转换为两电平。在立体声和单声道接口模式之间的选择可以通过管脚、寄存器或时钟频率编程来确定。使用多比特转换器的优点可以是较低的时钟速度和较低的功耗,这可以在因子二的量级上,当将两电平转换器与三电平转换器进行比较时,其给出了显著的功率降低节约。数字Δ∑转换器或特殊逻辑可以用于从多电平转换到两电平比特流输出。
可以在本文描述的统一总线通信协议的至少一个实施例中使用的另一减少功耗的方法是:允许可以进入空闲的系统在系统中什么也没发生时进入空闲。
可以在本文描述的统一总线通信协议的至少一个实施例中使用的另一减少功耗的方法是:降低驱动电压,这可以给出大的功耗降低。还有可能使用多个信号电压,例如{0,0.6,1.2,1.8V},以在每个音频数据时隙中传输两个比特。
可以在本文描述的统一总线通信协议的至少一个实施例中使用的另一减少功耗的方法是:将时钟信号与数据集成在一起。该方法可能导致较不灵活的计时、对特殊时钟恢复电路的潜在使用和针对连接到总线的所有设备的可能的恒定功率流失。然而,如果物理层的物理功耗是主流,则显著的功率降低可以由于将时钟信号包括在数据中而得到,例如,如可以用单线和8/10b或者时钟和数据的类似编码来完成。在该情况下,可以将功耗减为约每比特0.5次转换,这是由物理约束来规定的。对于8/10b编码和随机数据来说,其是每比特0.625次转换。在一些实施例中,可以使用8/10b编码仅对音频信道进行编码。
可以在本文描述的统一总线通信协议的至少一个实施例中使用的可能能够实现低功耗的另一方法是:在两种模式下操作系统。在第一模式下,系统的所有特征可用,且在第二模式下,仅一些特征可用,且不再能够对设备编程。时钟频率不一定必须在这些不同模式之间改变。与第一模式相比,第二模式具有较低功耗。
作为示例,当前一些带宽被分配用于控制和同步,且在任何场景下对其进行分配。向总线64记录(clock out)该信息消耗了功率。然而,可以通过将总线64设在特定模式(其中,不再使用该带宽)下来获得较低的功耗。然而,这意味着控制不再可能,且从设备和主设备可以使用序列来重新获得控制。有可能从包括控制数据的场景变为没有控制数据的场景。问题在于在移除了控制数据之后确保同步,以及确保从设备或主设备可以发起控制序列,如果需要的话。如果移除了控制,设备可能脱离同步。例如,如果由于时钟线上的小错误导致错误发生,则这些设备可能不能取回同步,因为同步信息已被移除。针对该问题的最简单解决方案是将总线64上的设备数目限制为两个设备,且在时钟信号高时让一个设备驱动总线64,且在时钟信号低时让另一个设备驱动总线64。即使如果总线64上出现错误,这也完全解决了同步问题。
依然继续不发送控制数据的示例,进行发送的从设备(例如,麦克风)可以通过向主设备52发出特定序列来唤醒主设备52,该特定序列被预定为同一通信协议的一部分。通过让主设备52使用接收机缓冲区将该序列滤掉,将该序列从音频数据中屏蔽掉,因此如果存在将音频数据转换为可听音频信号的情形,则听不到该序列。主设备52可能必须强制从设备54回到控制模式。这可以用接收设备来进行,例如(但不限于)D类放大器,通过提交特定控制序列并在接收机处使用接收机缓冲区将其从音频数据中滤掉。然而,当接收机希望重新获得控制时,强制控制返回可能是更困难的。如果主设备52希望重新获得控制,其可以将时钟频率变为不同值,但是这将花费一些时间。因此,该方案可能缓慢且在接收机中可以使用特殊硬件。
备选地,在另一实施例中,可以修改物理层以允许两个设备同时在总线64上信号通知,并令作为结果的总线冲突导致操作模式的改变,以在总线64上再次开始发送控制数据。这可以与此处刚刚描述的总线系统一起使用。例如,通过总线64上没有改变来信号通知逻辑零值,且通过总线64上的值的改变来信号通知逻辑一值。希望被注意的接收机可以通过与发射机同时发送来强制总线64上的改变,并仅发送逻辑一值。这将导致发送的每个值与其前一值是反转的。这将不导致总线冲突,但是发射机将看到多个发送错误。然后发射机在有限和短数目错误之后将回退并停止发送。主设备52将能够通过在总线64上缺少任何信号转换来识别该状况。然后所有设备将操作变回初始编程模式,且主设备52将再次立刻获得对总线64的控制。
在该示例实施例中,如果从设备丢失与总线64的锁定,如果工作在比特流模式下,其可以开始在空白或满列或甚至所有列中写入。如果从设备根据当前使用的帧格式开始在空白列中写入,主设备52将检测到该活动,因为假定在当前使用的帧格式的空白列中没有任何活动。如果从设备根据当前使用的帧格式开始在已经使用的列中写入,则错误将针对一个或多个从设备出现,因为读回值将不对应于写入值。这基本上告诉主设备:“该从设备通过信号通知全一,正在请求模式改变”,由此告诉主设备:该从设备有些不对劲或者其需要注意。在该场景下,不允许在正常条件下信号通知特定数目的一,例如,发送多于127个连续一(由此对∑Δ转换器的输出设置了限制),这将导致动态范围的非常小(例如<0.07dB)的减少。
当系统具有彼此物理间隔较远的物理组件时,系统直径增加。间隔较远的组件的示例是大屏幕TV的用例。例如,100″16/9HDTV具有边长87″(221cm)和高度49″(125cm)。大屏幕TV可以提供特定功能,例如扬声器输出的波束成形或者多个麦克风支持的波束成形。这导致由于从设备(即,扬声器或麦克风)之间大的物理距离引起的较大的总线直径。尽管有可能使用模拟信令方案来完全解决该问题,在一些实例中,能够直接向较远间隔的组件直接传输数字音频可以是有益的。
在一些传统情况下,可以使用SLIMbus通信协议,因为其提供了一些优点。例如,SLIMbus协议要求数据在半个时钟周期内安定。不使用第二半个时钟周期,且因此有可能降低时钟频率,使得在不同设备之间不出现重叠。因此,使用较低的时钟频率允许使用更长的总线半径。
备选地,目前为止描述的统一总线通信协议的各种实施例不具有在数据之间的沉默的半个时钟周期。尽管本解决方案实现了较低功耗和较高带宽,其也意味着在时钟转换之后的特定时间内应当从总线64移除数据,以支持高带宽,且通常在大约5ns内。对于20MHz时钟,当使用全部两个时钟沿来传输数据时,这将总线半径限制为大约30cm(取决于设计要求)。
然而,本文描述的统一总线通信协议的至少一个实施例可以直接对SLIMbus物理层进行仿真,以允许长的总线半径。例如,通过使用具有偶数列的比特流模式且仅利用每隔一个列,有可能对SLIMbus驱动模式(D-Z-D-Z等)进行仿真。这具有以下优点:在不改变总线组件的物理层的情况下,可以驱动更长的线路。然而,缺点是:功耗变得与SLIMbus协议相仿。此外,为了驱动非常长的总线线路,降低了时钟速度,以避免发送线路效应,且让数据安定可能要较长的时间。由于长的线长以及较低效率的信令,这导致较低的带宽。
在一些实施例中,可以使用相同的I/O单元来实现相同的物理层以支持SLIMbus和所述统一协议。
在使用非常短的线的情况下,发送线效应是没有问题的。然而,当将多个设备连接到相同总线64时,可能难以利用匹配的发送线,该发送线在其他情况下可能用于点对点高速连接。
通过将备选拓扑用于连接到总线64的设备,使得不同时驱动所有设备和/或不是所有设备都连接到相同总线,使得针对这些问题的解决方案成为可能。通过以管道或环形拓扑/结构来连接设备,即使单体链路仅具有单一发射机和接收机,也可以访问所有设备。由于单体设备之间的距离可以短得多,因此对于具有单一发射机和单一接收机的链路,发送速度可以高得多。该结构有效地在多个设备之间分布时序余量,而不是加起来成为单一大数。
现在参见图71,其中示出的是使用环形或管道拓扑将设备耦合到使用统一总线通信协议的总线的系统1600的示例实施例,且该系统使用统一总线通信协议。系统1600的结构等价于向多支路拓扑添加环形或管道(术语多支路意味着很多设备连接到单线)。系统1600包括两个不同的总线1602和1604,它们用于连接所有设备。总线1602和1604是使用双线实施例来实现的,其中,一条线可以用于发送时钟信号,且另一条线可以用于发送数据、控制信息和同步信息。使用双线总线的优点是:可以减少管脚数目,且由此还可以降低成本和空间要求。
系统1600包括通过总线1602连接到从设备1608至1614的主设备1606。从设备1614还担当将主设备1606与从设备(扬声器)1616至1622连接的集线器设备。应当注意:扬声器1616至1622的拓扑不同于从设备1608至1614的拓扑。具体地,扬声器1616至1622均接收时钟线,而数据线在每个扬声器1616至1622之间顺序连接。因此,在操作中,主设备1606控制总线1602并发送扬声器数据,对于该特定示例,通过从集线器设备1614。然后扬声器1616从从设备1614接收数据。然后扬声器1618从扬声器1616接收数据。然后扬声器1620从扬声器1618接收数据且扬声器1622从扬声器1620接收数据。最终,可以向从集线器设备1614发回来自扬声器1622的数据。因此,连接到总线1604的结构是环形结构(如果扬声器1622不连接到从集线器设备1614,则结构是管道)。在一些实施例中,首先向“从集线器设备接收数据的设备”发送时钟信号,且在其他实施例中,可以首先向“向集线器设备发送数据的设备”发送时钟信号。在任一情况下,扬声器1616至1622之间的物理距离以及扬声器1616和集线器设备1614之间的物理距离以及扬声器1622和从集线器设备1614之间的物理距离被选择为大约相同,使得可以在每个设备1614至1622之间同步数据发送。可以在扬声器1616至1622之间以及在扬声器1616至1622与从集线器设备1614之间发送的数据可以是阻抗信息,其指示给定扬声器的温度或状态信息,要么在环形拓扑的情况下使用全返回路径,要么在管道结构的情况下使用部分返回路径。从从集线器设备向连接到管道或环形的从设备发送的数据通常是例如同步、状态和编程信息以及数据(例如,音频)。应当注意:尽管图71示出了从主设备1606去往从集线器设备1614的音频信息,信息的流动还可以是反方向的。在一些实施例中,从集线器设备1614可以与扬声器或麦克风相结合。
现在参见图72,其中示出的是使用管道拓扑将设备耦合到总线(未示出)的系统1650的示例实施例,且该系统1650使用统一总线通信协议。系统1650包括从集线器设备1652、从设备1654至1660连同放大器1662和电阻器1664和1666。(数字输入)放大器就是音频数据的接收机的示例。
图72所示的拓扑的优点是:集线器设备1652处理单一时钟信号。因此,即使由于最远组件之间的大的距离导致系统1650中存在相当可观的延迟。此外,由于从集线器设备1652或主设备(未示出)接收根据用于发送数据的相同时钟信号来计时的信息,在发送的和接收到的时钟信号之间不应当存在差异。
现在参见图73,其中示出的是使用管道控制通过集线器设备(HUB)将很多设备AMP1、AMP2、AMP3和AMP4耦合到总线的系统1700的示例实施例,且该系统1700使用统一总线通信协议。在该情况下,时序更具挑战性,因为可以在两个不同方向上传输数据。大多数数据是从左向右发送的,但是存在一些数据(通常是状态或控制数据)是从右向左发送的。
还应当注意:在相邻设备之间可以存在延迟,以在正确时间向所有设备发送数据。这可以通过将来自集线器设备的比特流数据延迟特定数目的时钟周期来进行,该特定数目可以由寄存器设置来定义。该延迟使得数据能够在正确时间上在双方向上进行(从集线器设备到从设备以及从从设备到集线器设备)。在管道拓扑中,通常可以从从设备相继掀起设备传输例如状态信息。在系统1700中,集线器设备(HUB)将比特流信道6延迟一个采样,第一从设备(AMP1)将比特流信道6延迟一个采样,第二从设备(AMP2)将比特流信道4至6延迟一个采样且第三从设备(AMP2)将比特流信道2至6延迟一个采样。管道的端点不延迟任何采样。在该示例实施例中,集线器设备可以是主设备或从设备。
现在参见图74,其中示出的是使用单一维度交错环形拓扑将设备耦合到总线(未示出)的系统1750的示例实施例,且该系统1750使用统一总线通信协议。系统1750包括集线器设备1752、从设备1754至1760、放大器1762和电阻器1764和1766。电阻器1764和1766用作时钟信号的串联和并联端接。放大器1762是数字输入音频接收机的示例。
系统1800的优点是在双方向上传输大量信息(例如,从集线器设备到从设备或从从设备到集线器设备)更简单,但是集线器设备可能必须补偿时钟信号的发送部分和接收部分之间的偏斜(skew)。该拓扑可以用在大的面板(例如条形音箱(sound bar))上,因为以这种方式使用环形拓扑以获得在相邻从设备之间大致相等的距离(如果不这么做,则由于信号不完全安定而可能出现问题)。备选地,系统1800可以利用从设备14处的时钟信号来调整该时钟偏斜。
在图74所示的示例实施例中,以不同方式对物理设备进行编号,以获得从设备之间大致相等的物理距离。在该情况下,从设备1754与从设备1760物理相邻,从设备1760与从设备1756物理相邻,从设备1756与从设备1758物理相邻。然而,从设备1754至1760彼此电连接,使得在它们之间以及在从设备1754和集线器设备1752之间存在大致相等的电距离。设备的该物理放置的优点是:在设备之间的电距离近似相同,由此在这些设备之间平等地分布时序余量。缺点是更为复杂的配线图案。设备的该物理放置也可以与利用环形拓扑的其他总线通信协议一起使用。
现在参见图75,其中示出的是使用二维环形拓扑将设备耦合到总线(未示出)的系统1800的示例实施例,且该系统1800使用统一总线通信协议。在示例实施例中,集线器设备与从设备的环相连,且在每个设备之间存在约20到30cm(也可以使用其他类似的小距离)。由于数据顺序经过每个从设备,数据应当在短时间内安定。如果单体从设备之间的物理距离远小于整体物理距离,该拓扑允许支持很多大型结构,且即使由设备覆盖的总的整体物理距离可能非常大,依然可以实现非常高的速度。可以向环形结构的起点或终点提供时钟信号,同时时钟信号的结束端接可以发生在环形结构的相对端点处。
在使用图75的拓扑的至少一些实施例中,可以使用用于获得最高可能发送速度的匹配发送线路来实现时钟和/或数据线。该方案的缺点是:为了匹配目的而在这些设备中的发射机的输出阻抗和接收机中的输入阻抗被仔细调整过,且PCB上相对大的物理空间。此外,除非带宽使用非常高,否则与其他发送方法相比,该解决方案将导致过多的功耗。然而,该解决方案确实提供了远高于忽略了发送线路效应的技术所提供的带宽。
现在参见图76,其中示出的是使用管道控制将很多设备耦合到总线的系统1900的另一示例实施例,且该系统1900使用统一总线通信协议。此处,时序更简单(与图73的结构相比),因为数据就是从左向右传输。该拓扑具有比管道拓扑更大的带宽,但是可以使用集线器设备或主设备的接收部分中的附加处理,因为发送的和接收到的时钟信号之间可以存在一些时钟偏斜。有可能在管道环形结构下都对所有从设备进行编程并向所有从设备传输数据。两个结构都可以用于制造波束成形扬声器阵列。这些结构还可以用于制造麦克风阵列。在该情况下,为了最大的带宽,管道的结束而不是管道的开始可以连接集线器设备。该拓扑还可以与其他信号传输方法一起使用。
在正常场景下,总线时钟沿被用于定义存在信息传输的时间。然而,有可能减少时钟信号的转换数目;这可以涉及在时钟接收机中使用内部时钟乘法器或通过将时钟和数据信号相结合。在理论情况下,与连续时钟信号的情况相比,外部功耗可以减少多至因子三,该连续时钟信号在每个时钟沿期间对在平均50%的时间上改变的数据信号进行控制。然而,设备可能花费更长时间在总线上实现音频数据发送,因为在接收到输入时钟信号之后PLL将花费一些时间来获取锁定,且当从一个时钟频率变为另一个时钟频率时可能存在一些限制,因为PLL将花费某个有穷时间从一个锁定状态变为另一个锁定状态。此外,为了允许包括不支持超频的设备在内的任何设备锁定到总线64上,主设备52可以在帧的数据的就在时钟沿之前的最后一部分中发送信号,或者备选地在数据的在时钟沿之后的第一个部分处发送信号,因为这两个时钟沿都可以用于该目的。在该场景下,主设备52可以通过不允许任何其他设备利用该时隙的其他部分,来控制整个时隙。该时序允许锁定到总线64上的设备读取刚发送的帧中的S、X和Y信息并对其进行响应。因为该超频模式下的时序约束,该方法可以用于在从设备和主设备52之间传输数据,而通常不在两个从设备之间传输数据。主设备52和从设备54都可以使用内部同步分频器来降低抖动。通过重置寄存器映射中的比特,从设备中的内部PLL在不使用超频时可被禁用。此外,在超频操作模式下,总的可能带宽通常低于不使用超频的情况,因为可能必须在超频数据和固有抖动之间增加一些空间,以避免由于PLL抖动导致的不正确读数,以避免总线冲突,以及避免增加功耗。
现在参见图77a,其中示出的是在使用2X超频数据时隙时的示例的时序图(即,存在超频因子2)。与图4a所示的时序相对,这仅发送一半的数据。在使用图77a所示的时序时,当存在时钟转换时,发送两比特数据而不是一比特。因此,存在功率节约,因为为了发送相同数量数据,没有使用与例如图4a所示的方法一样多的时钟转换。图77a示出了在上升时钟沿和下降时钟沿都发送数据,使得对于单一时钟循环存在四个数据采样事件。
图77a还示出了主设备52使用的时钟与从设备54使用的时钟之间如何可能存在抖动。该抖动被示出为由从设备使用的时钟信号的阴影区域,如图所示其在总线64上不发送有效数据时转变到特定时间周期。该示例示出了从主设备52仅写入一个数据比特,且在其他情况下,主设备52也能够向其他时隙写入。由于PLL的有穷锁定范围,该方案通常可以用在比不使用该方案时窄得多的频率范围中。一般而言,不可能在没有时钟信号的情况下实现,因此该方案使用连续时钟信号。
现在参见图77b,其中示出的是示出了针对利用了超频数据时隙的设备可以使用的时序参数值的示例实施例的表格。按因子4x进行超频可以使用每半个时钟周期的4个(而不是2个)数据时隙来进行,且按因子6x进行超频可以通过每半个时钟周期发送6个数据比特来进行。应当注意(参见图77b中的*):如果仅有可能具有大于5ns的禁用输出时间(TDZ)和小于9ns的启用输出时间(TZD),则输出电流在违反周期(violation period)期间应当小于1mA。任何数据重叠将导致不希望出现的功耗增加。此外,如果内部设备时序事件(参见图77b中的+)要求,则PLL的VCO范围可以高整数因子。
现在将讨论某些超频示例的实际时序。对于使用8.2MHz时钟的2X超频,设置时间由公式1给出。
TSETUP=TCLKMIN/2-TZD-TCLKSKEW(WRITE)-TCLKSKEW(READ)-TPCB-TSLJITTER-TMSJITTER-TDLY (1)
=(70/2-16-2-2-2-4-1-4)ns=4ns,余量2ns。
保持时间由公式2给出。
THOLD=TZD-TCLKSKEW+TPCB-TSLJITTER-TMSJITTER+TDLY (2)
=(9-2-4-1+2)ns=4ns,余量3ns。
总线冲突时间由公式3给出。
TBUS CONFLICT=TZD+TSLJITTER(MIN)-TDZ(MAX)-TSLJITTER(MAX) (3)
=(9-2-5-2)ns=0ns(≥0)
对于使用8.2MHz时钟的4X超频,设置时间由公式4给出。
TSETUP=TCLKMIN/4-TZD-TCLKSKEW(WRITE)-TCLKSKEW(READ)-TPCB-TSLJITTER-TMSJITTER-TDLY (4)
=(140/4-16-2-2-2-4-1-4)ns=4ns,余量2ns。
保持时间由公式5给出。
THOLD=TZD-TCLKSKEW+TPCB-TSLJITTER-TMSJITTER+TDLY (5)
=(9-2-4-1+2)ns=4ns,余量3ns。
对于使用8.2MHz时钟的6X超频,设置时间由公式6给出。
TSETUP=TCLKMIN/6-TZD-TCLKSKEW(WRITE)-TCLKSKEW(READ)-TPCB-TSLJITTER-TMSJITTER-TDLY (6)
=(204/6-16-2-2-2-4-1-4)ns=4ns,余量2ns。
保持时间由公式7给出。
THOLD=TZD-TCLKSKEW+TPCB-TSLJITTER-TMSJITTER+TDLY (7)
=(9-2-4-1+2)ns=4ns,余量3ns。
如前所述,如果连接到总线64的一些设备支持超频且连接到总线64的一些设备不支持,则存在总线冲突的风险。不支持超频的设备可以占用整个数据时隙(一半总线时钟周期)。如果其他设备已经占用了该时隙的一部分,总线冲突错误将由一个或多个设备来报告。不支持超频的设备能够在很多环境下与总线64进入锁定,因为主设备52间给利用时钟沿之前的第一个或最后一个时隙。因此,来自主设备52的所有读取操作应当是正确的。这可以在图77c中看到,针对按因子二来超频的示例,其中,主数据时隙是总线64上时钟沿之前的最后一个时隙。
现在参见图77d,其中示出的是可以用于实现超频的寄存器值的示例。还示出的是可以在每种超频速率情况下实现的估计功率节约。
现在参见图78a,其中示出的是用于一次发出多个数据比特的时序和电压电平方案。在该示例中,存在使用的四个电压电平,而不是两个电压电平。四个电压电平可以用于每个时隙(即,数据时隙)发送两个数据比特,这允许更高的带宽,因为在给定时间周期中发出了更多的数据。该多电压电平数据方案还允许更低的功耗,因为可以将耕地的时钟速率用于发送相同数量的数据。然而,该多电压电平数据方案与双电压电平数据方案相比对于电磁干扰(EMI)更加敏感。
例如,假定存在1.8伏特电源,在双电压电平数据方案中,可以将电压0V和1.8V用于发送数据,这意味着存在0.9V噪声余量。在四电压电平数据方案中,可以将电压0V、0.6V、1.2V和1.8V用于不同的电压电平,这意味着存在早剩余量0.3V。在四电压电平情况下,0V可以表示“00”,0.6V可以表示“01”,1.2V可以表示“10”,以及1.8V可以表示“11”。应当注意到:当使用多电平信令时,存在小的限制:仅单一设备可以确定多于一个比特。因此,对于多于一个设备可能想要写入(例如,应答或中断比特)的任何时隙,该数据时隙将需要使用两个电压电平且不使用多电平信令。
现在参见图78b,其中示出的是在设备使用超频模式在数据时隙中发出多个打包比特(即,多电平信令)时可以使用的示例编码的表格。在该情况下,接收设备将被配置为相应解释比特。该编码将最小化总线64上的转换数目,且由此最小化功耗。作为示例(假定每个数据时隙六个比特),如果组中部分二进制字具有B17~B12=“111001”,则将使用图78b所示的编码方案来发送“100101”。作为另一示例,如果部分二进制流是“101011”,则将使用图78b所示的编码方案来发送“100001”。该方案减少了转换数目,且由此只要编码数据(例如,来自麦克风的比特流)符合来自这种系统(例如,在正常范围中工作的Δ∑转换器)的典型的输出,就减少了功耗。
系统可以被配置为具有以下操作模式或操作改变的各种组合,以实现不同等级的功耗控制。
可以将正常操作模式设为缺省操作模式。在该模式下,主设备52可以变成特定值,使得总线64被启用并运行。为了实现这点,主设备52可以对MCLKD字段变成不等于“00000”的值。总线64现在被启用并运行。
在至少一个实施例中,主设备52可以通过对MCLKD字段编程特定值,例如“00000”,来禁用总线64。相反,主设备52还可以通过对MCLKD字段编程特定值,例如除了“00000”之外的任何内容,来唤醒总线64。
为了改变功耗,可以对总线时钟配置进行改变。例如,在至少一个实施例中,有可能通过改变主时钟分频字段MCLKD中存储的值来切换总线64的工作频率。在一些实例中,用于单体设备端口的时钟分频器(参见PCLKD字段)也可能必须同时改变。这两个操作应当改变无效字段堆组中的信息。当已设置所有设备时,可以将具有相同的已更新的当前堆组字段的两个PING操作用于改变操作模式。
为了改变功耗,可以对总线模式配置进行改变。例如,在堆组字段的值改变期间,有可能改变帧中的列数(参见帧结构字段)。这允许对带宽的动态控制。然后可以在无效的堆组字段中在连接到总线64的所有设备中改变列宽度字段。当该操作完成时,可以通过提交具有与前一无效的堆组字段相对应的新的堆组号的两个PING帧(即,操作),来改变当前堆组字段。
另一操作模式是设备带宽控制模式,其中,设备可以通过激活请求堆组改变字段(在PING操作期间)来请求更多的带宽。如果主设备52已经将启用模式改变(ENABLE MODE CHANGES)字段设为一,则堆组字段将在下一个PING操作期间改变。在本实施例中,这将继续,只要请求堆组改变字段(在PING操作期间)和启用模式改变字段都被设为一。主设备52可以通过以下方式来允许更多的带宽:配置第二堆组,使得其允许比原始堆组选择更多的带宽。在其他实施例中,为了节约功耗,设备可以请求更少的带宽。
另一操作模式是设备激活的从总线睡眠中醒来(DEVICEACTIVATED WAKE UP FROM BUS SLEEP)模式,其中,任何设备可以通过在主设备52已关闭或禁用了针对总线64的时钟之后改变数据线的电平,以发起中断来唤醒总线64。在该情况下,当禁用了总线64时,其可以保持在三态模式下,但是由总线保持器以弱驱动方式来驱动,使得至少一个从设备可以发起总线唤醒。当从设备54发起设备唤醒时,将向主设备52发送中断,然后主设备52将再次开始激活总线64的时钟。在该情况下,总线64担当针对主设备52的输入。此外,在该情况下,连接到设备64的所有设备将醒来,除非他们已通过其他手段被编程为处于低功率模式。由于不知道主设备52的时钟是被下电还是仅仅被禁用,可能不可能针对该特定操作来实现低时延。具体地,如果主设备52已被下电,则取决于振荡器中使用的晶体的Q因子,在主设备52的主振荡器在正常电平上运行之前可能花费几千个时钟周期。
另一操作模式是主发起设备从睡眠中醒来(MASTER INITIATEDDEVICE WAKE UP FROM SLEEP)模式。对于非常低的功耗,大多数(如果不是全部)设备可能将其端口禁用,且总线64可被停止。然而,能够将连接到总线64的多个设备的功耗选择性减少到最低限度,同时依然能够与连接到总线64的其余设备进行通信通常是方便的。为了实现这点,可以将睡眠模式(其是由功能设置功率(FUNCTION SETPOWER)(“0001”和“0010”,部分关机)发起的)用于将从设备设置在特殊状态下,在该特殊状态下,其间仅偶尔监视帧,且丢弃总线64上的所有其他业务(参见图79)。将被忽略的帧数可以是15或255帧,其后,将监视一帧。选择这些数目的原因是:容易检测已发生的16或256个时钟循环,且由于它们都能被15所整除。从而,等待周期可以是任何数目M=N*L个帧,其中,N是正整数且L是基于使用的同步码的不同数目来选择的,其中,在本示例实施例中,L是15。在该技术中,正在睡眠的设备内的伪随机计数器将依然与下一个帧匹配,即使跳过了大量帧也如此。例如,参见图79,其示出了忽略了15*N个帧以减少功耗同时依然停留在与主设备同步的从设备。在正确实现的情况下,该模式可以得到在1MHz总线时钟速度上内部功耗小于1uA,而外部功耗(由于容性负载)可能大一个量级。为了进一步降低功耗,可以将总线时钟频率设为小于等于100kHz。在该操作模式下,主设备52可以主动使用PING操作作为向正在睡眠的设备发回通信的方式。通过向设备状态字段(缺省值可以是零)写入,主设备52可以将最高有效位设为一(即,高逻辑值)。在本示例实施例中,如果最高有效位等于一,则设备应当再次醒来,而如果其为零,则设备应当维持较低功率模式。由于该设备在睡眠中,且仅每N*15个帧才检查一次总线64上的数据,则主设备52可能不得不针对N*15个帧来重复发送设备唤醒命令,直到该设备实际醒来。
另一操作模式是设备发起的从睡眠中醒来(DEVICE INITIATEDWAKEUP FROM SLEEP)模式。该模式可以用于在下电之后要求数据传输的低时延的设备。典型场景的示例是URAT设备,其等待数据并突然其内部缓冲区被数据快速填满。因此,UART设备可以具有要发送的大量数据,但是主设备52可能将总线64设为不有效以减少功耗。由于晶体振荡器具有与Q/f0近似成正比的非常长的启动时间,其中,Q是晶体的品质因子,且f0是工作频率(例如,对于10MHz XTAL晶体约为1ms,且对于32.768kHz晶体约为1000ms),可能并不始终有可能通过利用晶体振荡器来实现低时延。因此,要求低时延的设备可以代之以使用具有低且已知的启动时间的内部驰张(RC)振荡器(参见图80b)。主设备52可以通过设置“功能设置功率”针对UART模式的设备进行编程。这允许UART根据使用的带宽来动态控制总线64,并向主设备52发送数据。然后当其晶体振荡器已稳定时,主设备52可以接管。在备选实施例中,可以使用LC振荡器或环形振荡器,而不是RC振荡器。这些不同振荡器可以在一个或一些时钟周期中重启,这是有利的,但是它们可以导致比主设备52的时钟信号更多的抖动。
在主设备52想要在UART设备接管之前控制时钟以避免时钟冲突(例如,没有来自UART设备的响应),在具有特定延迟且不改变时钟线的情况下,主设备52可以向数据线写入不同值一次或多次。这向UART信号通知:主设备52想要再次重新激活时钟信号,由此避免总线时钟线上的潜在冲突。
应当注意:尽管存在用于减少功耗的很多选项,限制因素可以是在实现中使用的物理层。因此,系统的所有设备可以不在相同总线上运行。一些设备可以比其他设备要求高得多的带宽,且可以通过在不同总线上运行这些设备来节约功率。此外,系统时钟速度将随着连接到总线64的设备数量而增加,这增加了容性损耗,且因此进一步增加了功耗。除此之外,有可能通过使用较低信令电压,例如1.20V,而不是1.80V,来显著最小化功率损耗。
现在参见图80a,其中示出的是针对使用统一总线通信协议的端口或设备可以设置的各种功耗模式或功率管理模式的备选实施例的示例。功能设置功率可以用于根据图80a所示的至少一个模式来设置端口或设备的操作模式。
在该情况下,功耗缩放由功能来设置,且不应当被认为是精确值,而是常见值。因此,在图80a中指示的功率等级对于不同从设备可以变化。可以使用功能设置功率来改变的模式依然可以对全控制寄存器映射进行访问,但是有可能影响模拟电路的性能。设备可以使用特殊机制从关机模式0000至0011返回,如前一节针对功率管理所描述的那样。在至少一个实施例中,当设备从低功率状态返回时,其可以恢复与在接收到关机命令之前的模式相同的模式下的操作。
在关机功率模式(0000)下,从设备将被完全关机且总线64上的活动将不再被该从设备所监视。一旦被置入关机功率模式下,不可能让主设备52唤醒该从设备。对从设备的唤醒可能必须由从设备本身来进行,或通过使用用于唤醒完全关机的从设备的控制信号的额外端子来进行。
在选通时钟关机功率模式(0001和0010)下,存在非常低的功耗,且将内部电路的时钟选通用于被置入这些模式中任一模式下的从设备。此外,将所有端口和所有内部功能下电。不再监视总线64,但是在每第M个帧期间,从设备将激活其逻辑且对于一帧将是醒来的(作为示例,参见图79)。从设备将依然检查其是否依然同步,检查X和Y字并相应地进行响应。如果主设备52想要唤醒该模式下的从设备,其可能需要向该从设备写入最高M次(在从设备接收到该消息并响应之前)。如果从设备看到同步错误(例如,由于在其睡眠时模式改变),在特定数目的同步错误之后,例如两个,其将尝试再次取回同步,并将在该过程中对其内部逻辑上电。在取回同步之后,从设备将再次去激活其内部逻辑。应当注意:对于本示例实施例,对于值M=16=15+1,跳过伪随机同步计数器的完全循环(即,15个帧),而对于值M=256=15*17+1,即跳过伪随机同步计数器的17个循环(即,272个帧),且监视下一个帧。
再次参见图80a,功耗模式“0011”可以用于UART时钟停止模式,其中,UART可以在时钟停止之后唤醒总线64本身。功耗模式“1000”可以用于仅进行控制的应用(control-only application),其中,所有内部电路被关机,除了与统一总线协议相关联的逻辑之外。功耗模式“1001”至“1111”可以用于具有对内部电路的各种电流缩放的正常操作模式,由此确定设备的实际性能。在这些模式之间进行选择将是在电流消耗和从设备性能之间的折中。功耗模式“0100”至“0111”当前未定义,且可以被映射到从设备中的第一可用低功率模式。
使用统一总线通信协议来增强数据通信的另一种方式是改变如何在总线64上发送时钟信号。例如,有可能使用正常用于数据发送的一个或多个时隙,以增加数据信号的冗余性,且由此传送在数据信号中与数据一起复用的时钟信息。因此,数据本身用于传送时钟沿。如现在将要描述的,这允许增加数据传输效率。这还导致了较少的功耗,且可以减少用于传送时钟信息的带宽。如果正在发送比特流数据或如果正在通过单线或使用单一发送信道来发送字数据,则可以使用该技术。该技术还允许彼此独立地控制每个数据信道,因为用于生成时钟信号的该技术不将来自不同信道的数据相结合。该技术还可以与多个源一起使用。该技术保证了每D个比特将存在时钟转换。该技术还允许在不将第二条线用于单独时钟和数据线的情况下维持同步。
现在参见图81a,其中示出的是将单线用于传输时钟和数据的统一数据格式的示例实施例。时钟由上升沿来定义,而数据由下降沿来定义。这在题为“Single wire bus system”的美国专利申请2012/0144078中更多地被描述。使用三个时隙来发送每个数据比特:一个时隙用于发送时钟低信号,一个时隙用于发送时钟高信号,且一个时隙用于实际数据。因此,在该示例中,前导沿用于传递时钟信息,而曳尾沿用于传递数据信息。在该情况下,数据带宽是1/3,且功耗与每个比特的2个转换相关(一个转换用于低-高,且一个转换用于高-低)。
现在参见图81b,其中示出的是使用六个数据时隙或时隙来发送四个数据比特的第二数据传输示例。再一次地,利用两个时隙来传递时钟信息(第一数据时隙信号通知低时钟信号且第二数据时隙信号通知高时钟信号)。在该情况下,数据带宽是2/3,且功耗与每个比特0.875转换相关。从而,与图81a相比,可用于数据传输的两个带宽都更高,且功耗更低,而使用了用于同步的相同的低到高转换。
现在参见图81c,其中示出的是使用比特反转来更有效率的发送时钟和数据信道的数据传输的示例。在该情况下,将数据比特组中的一个数据比特重复一次,但是在第二次发送时具有替代极性(即,其是比特反转的),由此针对每个数据符号组创建了时钟转换。换言之,数据串的第一比特被重复,第二次具有相反极性,以传递时钟信号沿。换言之,数据比特之一被发送两次,一次是反转的,一次是正常的(或反之),以提供每个数据组的时钟转换,并向设备提供要使用的转换,以锁定到总线上。因此,D0和提供了时钟脉冲以及发送了一比特数据(D0)。在备选实施例中,可以按相反顺序来发送这两个比特。数据比特D0正在发送诸如音频信息、控制信息或其他信息之类的信息。因此,数据比特D0可以具有任何值,而不管总线64上的活动如何。因此,现在在六个时隙中发送了五比特数据。
在图81c的示例中,数据带宽是5/6(每六个数据时隙发送五个)且功耗与每比特0.7个转换相关。为了进行该确定,假定数据比特是不相关的。因此,从D1->D2,D2->D3且D4->D0走来,存在1/2的转换概率(如果下一个比特是相同值,则没有转换)。从D0到的转换具有转换概率1。因此,转换总数是5*0.5+1=3.5。存在所发送的总共5个比特。因此,每个比特的总功耗是每个比特0.7个转换(即,3.5/5)。因此,与图81a和81b的示例相比,用于传递时钟和数据信息的该新的数据比特反转方法导致了更大的带宽和更低的功耗。此外,在使用该技术的同时,应当注意到:依然可以单独驱动所有数据时隙。
图81b和81c的方案适用于使用高带宽且具有低功耗且还使用单个线或介质来发送信息的总线系统。在其他实施例中,发送介质可以是光学的或无线的。应当注意到:PLL通常将用在设备的接收机中,以从数据流中提取时钟信息。此外,利用单时钟沿(例如,低到高或高到低)转换的PLL,例如类型III或类型IV相位检测器,可以利用小的延迟线连同异或门(XOR)一起,以找到每个数据组的转换。在该应用中,延迟可以方便地近似等于一个数据时隙,且可以向异或门馈送直接信号和延迟信号,且来自异或门的输出可被提供给相位检测器。
还应当注意到:可以用高级过程语言(例如,面向对象编程)来编写经由软件实现的用于执行本文所述统一总线通信协议的至少一个方法的至少一些元素。因此,如面向对象编程领域的技术人员所知道的:程序代码可以用C、C++或任何其他合适的编程语言来编写,且可以包括模块或类。备选地或附加地,可以根据需要用汇编语言、机器语言或固件来编写经由软件实现的这些元素中的至少一些元素。在任一情况下,程序代码可以存储在存储介质上或可由通用或专用可编程计算设备来读取的计算机可读介质上,该计算设备具有处理器、操作系统和为了实现本文所述统一总线通信协议的至少一个方法的功能所必需的关联硬件和软件。程序代码在由处理器读取时将处理器配置为以新的、特定的和预先定义的方式来工作,以执行本文针对统一总线通信协议所描述的至少一个方法。
此外,至少一些本文描述的方法能够以计算机程序产品的形式分发,该计算机程序产品包括承载了用于一个或多个处理器的计算机可用指令的计算机可读介质在内。该介质可以用各种形式来提供,例如(但不限于):一个或多个磁盘、高密度盘、磁带、芯片、U盘、外部硬盘、有线线路发送、卫星发送、互联网发送或下载、磁和电存储介质、数字和模拟信号等。计算机可用指令还可以具有各种形式,包括已编译和未编译的代码。
尽管申请人的本文所述的教导结合各种实施例用于说明目的,预期申请人的教导不应受限于这种实施例。相反,在不脱离实施例的情况下,本文描述和示出的申请人的教导实施例包含各种备选、修改和等价物,该实施例的一般范围在所附权利要求中进行了定义。