模块化通信框架的制作方法

文档序号:15742608发布日期:2018-10-23 22:32阅读:202来源:国知局
模块化通信框架的制作方法

本申请要求于2015年12月31日提交的标题为“DYNAMIC ADDRESSING AND HOT SWAPPING ON AN I2C BUS USING ACTIVE SLAVES”的美国临时专利申请No.62/274,038、于2015年12月31日提交的标题为“RAISING PRIORITIZED INTERRUPTS ON AN I2C BUS-PACKET HIJACK MECHANISM”的美国临时专利申请No.62/274,040、于2015年12月31日提交的标题为“MODULAR COMMUNICATION FRAMEWORK”的美国临时专利申请No.62/274,043的优先权,这些专利申请通过引用被结合于此,就像在本申请中完全阐述一样,用于所有目的。



背景技术:

智能手表是计算机化的腕表,其具有各种功能,诸如计时、日程安排和组织。智能手表也可以具有数码相机和媒体播放器以及其它功能。智能手表提供专属(captive)特征集并且通常是不能升级或改变的单个单元。



技术实现要素:

实现通常涉及在模块化系统中提供寻址。在一些实现中,一种方法包括检测连接到总线的一个或多个模块,其中一个或多个模块是未初始化(uninitialized)的。该方法还包括将一个或多个模块与总线上的状态地址相关联。该方法还包括轮询(poll)状态地址上的一个或多个中断。该方法还包括基于一个或多个中断将一个或多个相应的动态地址分配给一个或多个模块。

进一步关于该方法,在一些实现中,如果一个或多个模块不具有分配给它们的动态地址,则一个或多个模块是未初始化的。在一些实现中,状态地址是全局共享地址。在一些实现中,状态地址是固定地址。在一些实现中,该方法还包括:响应于轮询,从一个或多个相应模块接收一个或多个轮询中断。在一些实现中,该方法还包括:响应于轮询,从一个或多个相应模块接收一个或多个唯一标识符。在一些实现中,一个或多个动态地址是唯一地址。

在一些实施例中,计算机可读存储介质在其上携带一个或多个指令序列。当由一个或多个处理器执行时,指令使得一个或多个处理器执行操作,包括检测连接到总线的一个或多个模块,其中一个或多个模块是未初始化的;将一个或多个模块与总线上的状态地址相关联;轮询状态地址上的一个或多个中断;基于一个或多个中断将一个或多个相应的动态地址分配给一个或多个模块。

进一步关于该计算机可读存储介质,在一些实现中,如果一个或多个模块不具有分配给它们的动态地址,则一个或多个模块是未初始化的。在一些实现中,状态地址是全局共享地址。在一些实现中,状态地址是固定地址。在一些实现中,当指令被执行时还使得一个或多个处理器执行操作,包括:响应于轮询,从相应模块中的一个接收一个或多个轮询中断。在一些实现中,当指令被执行时还使得一个或多个处理器执行操作,包括:响应于轮询,从一个或多个相应模块接收一个或多个唯一标识符。在一些实现中,一个或多个动态地址是唯一地址。

在一些实现中,系统包括一个或多个处理器,并且包括在一个或多个非瞬态计算机可读存储介质中编码的用于由一个或多个处理器执行的逻辑。当被执行时,该逻辑可操作以执行操作,包括:检测连接到总线的一个或多个模块,其中一个或多个模块是未初始化的;将一个或多个模块与总线上的状态地址相关联;轮询状态地址上的一个或多个中断;以及基于一个或多个中断将一个或多个相应的动态地址分配给一个或多个模块。

进一步关于该系统,在一些实现中,如果一个或多个模块不具有分配给它们的动态地址,则一个或多个模块是未初始化的。在一些实现中,状态地址是全局共享地址。在一些实现中,状态地址是固定地址。在一些实现中,当逻辑被执行时还可操作以执行操作,包括:响应于轮询,从一个或多个相应模块接收一个或多个轮询中断。在一些实现中,当逻辑被执行时还可操作以执行操作,包括:响应于轮询,从一个或多个相应模块接收一个或多个唯一标识符。

实现通常涉及促进模块化系统中的通信。在一些实现中,一种方法包括发起(initiate)与总线上的至少一个第一模块的通信,其中通信经由与至少一个第一模块相关联的动态地址发起。该方法还包括确定总线上的至少第二模块是否发起中断,其中该确定基于状态地址处的信息,并且其中状态地址与第一模块和第二模块相关联。该方法还包括如果总线上没有其它模块发起中断,则继续与至少一个第一模块通信。

进一步关于该方法,在一些实现中,通信的发起包括对动态地址执行一个或多个写操作。在一些实现中,动态地址是唯一地址。在一些实现中,确定是否总线上任何其它模块发起中断包括对状态地址执行一个或多个读取操作。在一些实现中,状态地址是全局共享地址。在一些实现中,继续与至少一个第一模块的通信包括经由与至少一个第一模块相关联的动态地址传递信息。在一些实现中,继续与至少一个第一模块的通信包括执行从动态地址的一个或多个读取操作。

在一些实施例中,计算机可读存储介质在其上携带一个或多个指令序列。当由一个或多个处理器执行时,指令使得一个或多个处理器执行操作,包括发起与总线上的至少一个第一模块的通信,其中通信经由与至少一个第一模块相关联的动态地址发起;确定总线上的至少第二模块是否发起中断,其中该确定基于状态地址处的信息,并且其中状态地址与第一模块和第二模块相关联;以及如果总线上没有其它模块发起中断,则继续与至少一个第一模块通信。

进一步关于计算机可读存储介质,在一些实现中,通信的发起包括对动态地址执行一个或多个写操作。在一些实现中,动态地址是唯一地址。在一些实现中,为了确定总线上的任何其它模块是否发起中断,当指令被执行时还使得一个或多个处理器执行包括对状态地址执行一个或多个读取操作的操作。在一些实现中,状态地址是全局共享地址。在一些实现中,为了继续与至少一个第一模块通信,当指令被执行时还使得一个或多个处理器执行包括经由与至少一个第一模块相关联的动态地址传递信息的操作。在一些实现中,为了继续与至少一个第一模块通信,当指令被执行时还使得一个或多个处理器执行包括执行从动态地址的一个或多个读取操作的操作。

在一些实现中,系统包括一个或多个处理器,并且包括在一个或多个非瞬态计算机可读存储介质中编码的用于由一个或多个处理器执行的逻辑。当被执行时,逻辑可操作以执行操作,包括:发起与总线上的至少一个第一模块的通信,其中通信经由与至少一个第一模块相关联的动态地址发起;确定总线上的至少第二模块是否发起中断,其中该确定基于状态地址处的信息,并且其中状态地址与第一模块和第二模块相关联;以及如果总线上没有其它模块发起中断,则继续与至少一个第一模块通信。

进一步关于该系统,在一些实现中,通信的发起包括对动态地址执行一个或多个写操作。在一些实现中,动态地址是唯一地址。在一些实现中,为了确定总线上的任何其它模块是否发起中断,当逻辑被执行时还可操作以执行包括对状态地址执行一个或多个读取操作的操作。在一些实现中,状态地址是全局共享地址。在一些实现中,为了继续与至少一个第一模块通信,当逻辑被执行时还可操作以执行包括经由与至少一个第一模块相关联的动态地址传递信息的操作。

实现通常涉及促进模块化系统中的一般通信。在一些实现中,一种方法包括接收对第一数据类型的数据的请求。该方法还包括确定由总线上的一个或多个相应模块支持的数据类型,其中数据类型包括第一数据类型。该方法还包括选择至少一个模块来供应(serve)所请求的数据。该方法还包括从所选择的至少一个模块提供第一数据类型的数据。

进一步关于该方法,在一些实现中,数据类型包括一个或多个生命体征数据类型。在一些实现中,数据类型包括一个或多个定位数据类型。在一些实现中,数据类型包括一个或多个大气数据类型。在一些实现中,一个或多个相应模块中的每个模块与一个或多个功能集合相关联,其中每个功能集合包括支持预定数据类型的至少一个数据类型功能。在一些实现中,确定由一个或多个相应模块支持的数据类型包括:为每个模块确定一个或多个相关联的功能集合;并且为每个功能集合确定一个或多个数据类型。在一些实现中,选择基于预定的优先级策略。在一些实现中,该方法还包括使得模块中的一个或多个模块能够进入睡眠模式和从睡眠模式唤醒。

在一些实施例中,计算机可读存储介质在其上携带一个或多个指令序列。当由一个或多个处理器执行时,指令使得一个或多个处理器执行操作,包括:接收对第一数据类型的数据的请求;确定由总线上的一个或多个相应模块支持的数据类型,其中数据类型包括第一数据类型;选择模块中的至少一个来供应所请求的数据;以及从所选择的至少一个模块提供第一数据类型的数据。

进一步关于计算机可读存储介质,在一些实现中,数据类型包括一个或多个生命体征数据类型。在一些实现中,数据类型包括一个或多个定位数据类型。在一些实现中,数据类型包括一个或多个大气数据类型。在一些实现中,一个或多个相应模块中的每个模块与一个或多个功能集合相关联,并且其中每个功能集合包括支持预定数据类型的至少一个数据类型功能。在一些实现中,为了确定由一个或多个相应模块支持的数据类型,当指令被执行时还使得一个或多个处理器执行操作,包括:为每个模块确定一个或多个相关联的功能集合;并且为每个功能集合确定一个或多个数据类型。在一些实现中,选择基于预定的优先级策略。在一些实现中,当指令被执行时还使得一个或多个处理器执行包括使得一个或多个模块能够进入睡眠模式和从睡眠模式唤醒的操作。

在一些实现中,系统包括一个或多个处理器,并且包括在一个或多个非瞬态计算机可读存储介质中编码的用于由一个或多个处理器执行的逻辑。当被执行时,逻辑可操作以执行操作,包括:接收对第一数据类型的数据的请求;确定由总线上的一个或多个相应模块支持的数据类型,其中数据类型包括第一数据类型;选择模块中的至少一个来供应所请求的数据;以及从所选择的至少一个模块提供第一数据类型的数据。

进一步关于该系统,在一些实现中,数据类型包括一个或多个生命体征数据类型。在一些实现中,数据类型包括一个或多个定位数据类型。在一些实现中,数据类型包括一个或多个大气数据类型。在一些实现中,一个或多个相应模块中的每个模块与一个或多个功能集合相关联,并且其中每个功能集合包括支持预定数据类型的至少一个数据类型功能。在一些实现中,为了确定由一个或多个相应模块支持的数据类型,当逻辑被执行时还可操作以执行操作,包括:为每个模块确定一个或多个相关联的功能集合;并且为每个功能集合确定一个或多个数据类型。

通过参考说明书的剩余部分和附图,可以实现对本文公开的特定实现的特性和优点的进一步理解。

附图说明

图1示出了可以用于本文描述的实现的示例模块化系统的框图。

图2示出了可以用于本文描述的实现的示例模块化系统的框图。

图3示出了根据一些实现的用于在模块化系统中提供寻址的示例流程图。

图4示出了根据一些实现的与状态地址和动态地址相关联的模块的框图。

图5示出了根据一些实现的用于促进模块化系统中的通信的示例流程图。

图6示出了根据一些实现的写操作的上下文中的示例数据结构。

图7示出了根据一些实现的状态检查操作的上下文中的示例数据结构。

图8示出了根据一些实现的读取操作的上下文中的示例数据结构。

图9示出了根据一些实现的示例优先级表。

图10示出了根据一些实现的用于促进模块化系统中的一般通信的示例流程图。

图11示出了可以用于本文描述的一些实现的示例计算系统的框图。

图12示出了可以用于本文描述的一些实现的示例计算系统的框图。

图13示出了可以用于本文描述的一些实现的示例计算系统的框图。

具体实施方式

本文描述的实现启用、促进和管理模块化系统中的通信。如本文更详细描述的,实现一般涉及提供模块化系统中的寻址,并促进模块化系统中的各种通信。例如,实现使得诸如智能手表之类的个人设备能够经由可以扩展、升级和/或改变的模块来提供功能集合,并且允许定期(例如,每天或每周等)定制。在一些实现中,模块是可以附接到智能手表的主体和从智能手表的主体拆卸的物理单元,其中每个模块提供经由智能手表供应到用户的一个或多个功能。

在各种实现中,智能手表包括与模块化系统中的一个或多个模块通信的核心。在一些实现中,核心检测连接到总线的一个或多个模块,其中一个或多个模块是未初始化的。如本文更详细描述的,核心将未初始化的模块与总线上的全局共享状态地址相关联。核心还轮询状态地址上的中断,并基于中断向未初始化的模块分配相应的动态地址。

在一些实现中,核心发起与总线上的至少一个模块的通信,其中通信经由与模块相关联的动态地址发起。核心基于共享状态地址处的信息确定总线上的任何其它模块是否发起中断。如果总线上没有其它模块发起中断,则核心继续与模块通信。

在一些实现中,核心接收对特定数据类型的数据的请求。核心确定由总线上一个或多个模块支持的数据类型。核心选择至少一个模块来供应所请求的数据,并从所选择的模块提供特定数据类型的数据。

下面阐述的具体实施方式旨在作为主题技术的各种配置的描述,并且不旨在表示可以实践主题技术的唯一配置。附图并入本文并构成具体实施方式的一部分。具体实施方式包括为了提供对主题技术的更透彻理解的具体细节。但是,将清楚和清晰的是,主题技术不限于本文阐述的具体细节,并且可以在没有这些细节的情况下实践。在一些情况下,结构和组件以框图形式示出,以便避免模糊本主题技术的概念。

图1示出了可以用于本文描述的实现的示例模块化系统100的框图。如图所示,模块化系统100包括核心102,其与一个或多个模块104a、104b等通信。

如图所示,在各种实现中,核心102包括核心集线器106和核心处理器108(标记为“CPU”)。而且,在各种实现中,模块104a包括处理器110a或微控制器110a(标记为“MCU”)和传感器112a。类似地,模块104b包括处理器110b或微控制器110b(标记为“MCU”)和传感器112b。

在各种实现中,核心102经由总线114与模块104a、104b等通信。在一些实现中,处理器108与给定模块的微控制器(例如,处理器110a、处理器110b等)之间的通信主要使用改进版本的内部集成电路(I2C)技术来实现。这也使用核心集线器106(或任何其它合适的集线器设备)来实现。在一些实现中,总线114是I2C总线。如本文更详细描述的,核心102是主设备(master)并且核心102的核心集线器106管理作为从设备(slave)的模块104a、104b等。在各种实现中,核心102发起与模块的所有对话。

在各种实现中,核心102和模块之间的通信可以以两种模式操作。例如,通信可以在高速模式或低速模式下操作。在一些实现中,默认情况下,通信在低速模式下发生。在一些实现中,可以使用通用串行总线(USB)来实现高速。在一些实现中,可以使用I2C来实现低速。在一些实现中,总线上具有不同速度要求的模块可以同时操作,其中使用USB和I2C两者。实现不限于这些协议。

如本文更详细描述的,为了消除有限的I2C地址空间的限制,该协议使用动态寻址。实现支持在核心设备通电时模块的热插拔。实现还使得单独的模块能够中断核心并被及时寻址。这些特征通过在所有模块之间使用全局共享地址并结合本文更详细描述的分组(packet)劫持机制来实现。

在一些实现中,模块化系统100包括模块化框架,其负责响应通信总线上的事件、与模块通信、向应用通知模块事件、以及(例如,向第三方开发人员等)提供传感器的访问方法。

在一些实现中,模块化系统100实现用于在核心102和模块104a、104b等之间通信的通信协议。通信协议促进高速模式和低速模式两者、允许中断和模块检测、并使得能够唤醒处于睡眠状态的模块。

在一些实现中,模块化系统100包括在模块104a、104b等中的每一个上运行的模块平台。模块平台的主要功能是促进核心102与模块104a、104b等之间的通信。模块平台包含引导加载程序,其更新设备固件并且可由模块产生器扩展,以便为(例如,模块产生器等的)模块运行特定代码。

在一些实现中,核心102包括核心操作系统,其供应适合于诸如可穿戴设备之类的各种应用的用户体验。在一些实现中,核心集线器106包括核心集线器固件并管理模块(例如,模块102a、104b等)。核心集线器固件负责管理通信总线、初始化和注册模块状态、以及检测诸如模块连接和断开之类的事件或由模块引发的中断。

在各种实现中,模块基于分层总线来组织,其中核心102或更精确地核心集线器106是总线上的主设备。在一些实现中,核心102和核心集线器106之间的总线可以是串行外围接口(SPI)总线,但不限于SPI总线。取决于具体实现,总线的具体类型可以变化。在各种实现中,核心集线器106确定在任何给定时间在模块之间发生哪种通信。作为模块上的主设备的核心集线器106对于简单的通信管理是有利的。每个模块用作自包含的外围设备。虽然在本文中实现是在执行特定功能的核心集线器106的上下文中描述的,但是模块化系统100的另一合适的组件或组件的其它组合或与模块化系统100相关联的任何合适的(一个或多个)处理器(诸如CPU 108)可以执行本文描述的实现。在各种实现中,模块化系统100可以不具有图1中所示的组件的全部和/或可以具有包括其它类型的组件的其它元件来代替或补充本文所示的那些。

图2示出了可以用于本文描述的实现的示例模块化系统200的框图。应用级202沿着各种数据流路径经由核心集线器206与模块204通信,这将在本文中更详细地描述。

在一些实现中,一般通信经由现有框架流动,从而利用现有框架的能力和控制逻辑。在这种场景下,数据流路径在应用级处开始,经过现有框架208、硬件抽象层(HAL)210、文件节点212、214、216等、核心集线器驱动器(driver)218并且然后通过核心集线器206。

在一般通信经由现有框架流动的一些实现中,核心集线器206管理模块性方面,并且传感器驱动器挂钩(hook)到HAL 210中。在各种实现中,HAL 210处理框架(由应用使用)和硬件之间的通信。核心集线器206将模块性尽可能多地封装,使得现有的基本操作系统不知道模块性。这使得应用开发人员能够使用操作系统的先前知识轻松构建应用,而无需担心模块被断开等。

在一些实现中,一般通信经由定制(bespoke)应用程序接口(API)流动。在一些实现中,另一数据流路径在应用级处开始,经过定制API 220并且然后通过核心集线器206。该场景还涉及与和文件节点212、214、216等相关联的传感器的通信。在各种实现中,这种场景使得非模块化框架能够用作模块化框架,因为它使得开发人员能够一般地与模块进行通信。

在一般通信经由定制API 220流动的一些实现中,定制API定义可以被应用请求的能力集合。当被请求时,模块可以注册它们直接支持的标准函数(例如,每个模块可以具有函数GET_SUPPORTED_DATA_TYPES,其返回所支持的数据类型的列表)。当应用请求某个能力时,核心集线器206的核心集线器驱动器218解释该能力并确定它需要调用哪些标准函数。然后,驱动器从核心集线器206请求支持给定标准函数集合的模块列表。一旦选择了匹配模块,就可以从该模块请求信息以及由该模块提供信息(例如,原始数据等)。

在一些实现中,应用可以注册以下回调函数(callback)中的一个或多个:查询可用能力、不时地(at interval)提供能力、能力可用(例如,连接等)、能力不可用(例如,断开连接等)。因此,在这种情况下,应用注册以便关于连接事件得到通知,但是在更高的抽象级(例如,应用不关心应用正在与之通信的特定模块),只有特定数据类型被返回。

在一些实现中,直接通信经由定制API流动。在一些实现中,另一数据流路径在应用级开始,经过定制API 220并且然后通过核心集线器206。在各种实现中,该场景使得非模块化框架能够用作模块化框架,因为它使得开发人员能够与模块直接通信。使得能够与模块直接通信进而允许在较低层控制模块。例如,各种实现支持与连接到总线的模块相关联的各种传感器功能。因此,核心集线器206可以与模块通信,以便从与任何给定模块相关联的任何类型的传感器收集数据。

在直接通信经由定制API流动的一些实现中,每个模块注册特定模型号(例如,与特定模型相关联的数字标识符等)。应用可以请求与特定(范围的)(一个或多个)模型号通信。核心集线器206提供包含与查询匹配的模块集合以及用于使用每个模块的句柄(handle)(例如,数字标识符等)的响应。然后,经由定制API/框架的后续直接调用可能需要句柄,使得核心集线器206知道要与哪个模块通信。这些功能可以被称为供应商功能。

在各种实现中,与使用标准固定硬件寻址系统(例如,在地址1和地址126之间等)对比,核心使用动态寻址,该动态寻址使用活动从设备,这使得能够进行模块的热交换。在一些实现中,核心可以使用动态寻址而没有优先级中断(例如,轮询)以使得能够进行模块的热交换。

再次参考图1,在各种实现中,当给定模块(例如,模块104a、模块104b等)首先连接到模块化系统100的总线114时,该模块尚未被初始化并且需要被初始化以便与核心102通信。在一些实现中,为了请求初始化,模块引发与核心集线器106的中断并等待被分配动态地址。

如本文所指示的,实现使得新连接(“活动”)模块能够与核心102(主设备)协商动态地址,并使得核心102和模块之间未来能够通信。这消除了可以产生的模块数量的硬限制。在初始化之后,模块然后将具有两个从设备地址,其动态地址和(所有模块共享的)通用状态地址。

图3示出了根据一些实现的用于在模块化系统中提供寻址的示例流程图。参考图1和图3两者,在方框302处发起方法,其中核心102检测连接到总线114的一个或多个模块。在这些示例实现中,每个模块是未初始化的。在各种实现中,如果一个或多个模块不具有分配给它们的动态地址,则一个或多个模块是未初始化的。例如,如果特定模块不具有分配给它的动态地址,则该特定模块是未初始化的。例如,如果特定模块新连接到总线,则该模块可能不具有分配或分派给它的动态地址。新连接到总线(例如,物理耦合到总线或无线耦合到总线)的一些模块可能是未初始化的(例如,不具有分配的动态地址),而连接到总线的其它现有模块已被初始化(例如,具有分配的动态地址)。

在各种实现中,核心102可以以各种方式检测连接到总线的新模块。例如,在一些实现中,新模块可以经由总线向核心102发送信号以指示模块的存在。如本文更详细描述的,模块可以通过向核心102发送中断信号来发起中断,其中中断指示给定的对应模块是未初始化的并且需要动态地址。在一些实现中,核心102可以周期性地将信号发送到不同的动态地址以检测响应。在一些实现中,一个或多个传感器可以用于检测总线上的新模块,并向核心102通知任何新连接的模块。

在各种实现中,总线上的每个组件(例如,模块等)包含其自己的MCU,其用于地址和冲突解决。

在方框304处,核心102将一个或多个未初始化的模块与总线上的状态地址相关联。在各种实现中,状态地址是全局共享地址,因为多个模块或所有模块共享相同的状态地址。换句话说,核心102为所有模块分配相同的状态地址。

本文在与所有模块相关联的单个状态地址的上下文中描述了各种实现。其它替代实现是可能的。例如,在一些实现中,核心102可以利用多个状态地址(例如,2个状态地址、3个状态地址等),其中本文描述的实现适用于多个状态地址。例如,在本文描述的方框306中,核心102可以基本上同时轮询多个状态地址上的中断。例如,如果一个或多个类型的模块与第一状态地址相关联,并且一个或多个其它类型的模块与第二状态地址相关联,则这种方案可能是有用的。因此,每个状态地址可以由多个模块共享。在一些实现中,不同的状态地址可以具有不同的优先级,其中核心102首先被具有较高优先级的状态地址中断。

图4示出了根据一些实现的与状态地址402和动态地址404a和404b相关联的模块104a和104b的框图。如图所示,核心102将模块104a和模块104b两者关联到相同的全局共享状态地址402。换句话说,核心102将相同的状态地址分配给多个或所有模块。如本文所指示的,在各种实现中,状态地址是固定总线地址。例如,在各种实现中,状态地址不需要改变,其中总线上的相同状态地址用于所有模块。初始地,每个模块使用相同的固定状态地址。如本文更详细描述的,核心102将模块104a与唯一动态地址404a相关联,并将模块104b与唯一动态地址404b相关联。

在方框306处,核心102轮询状态地址上的一个或多个中断。在一些实现中,核心102以预定间隔轮询状态地址。在一些实现中,当模块在状态地址上设置中断时,核心102轮询该状态地址。在一些实现中,当核心102轮询状态地址时,每个未初始化的模块以中断后面跟着其唯一的软件地址来响应。

在一些实现中,响应于轮询,核心102分别从未初始化的模块中的一个或多个来接收一个或多个轮询的中断。在一些实现中,核心102可以一次一个地检测状态地址处的中断。在一些实现中,多个中断可以存储在缓冲器中,从而使得核心102能够在接收到多个中断时处理它们。

在一些实现中,也响应于轮询,核心102还分别从未初始化的模块接收唯一标识符。在各种实现中,每个中断指示给定的对应模块是未初始化的并且需要动态地址。在一些实现中,中断是高优先级中断。在一些实现中,每个模块具有用于模块类型的唯一地址,其使得相同类型的多个模块能够存在于总线上。

在各种实现中,如果核心102接收到至少一个中断,则核心102可以暂时停止正常例程以便初始化一个或多个新的未初始化的模块。

在方框308处,核心102基于中断将一个或多个相应的动态地址分配给一个或多个未初始化的模块。在各种实现中,动态地址是唯一地址。因此,为每个模块分配或分派唯一的动态地址。例如,仍然参考图4,核心102将模块104a和104b中的每一个与唯一的动态地址相关联。如图所示,模块104a与动态地址404a相关联,并且模块104b与动态地址404b相关联。

如本文所指示的,核心102基于中断将一个或多个相应的动态地址分配给一个或多个未初始化的模块。例如,在各种实现中,核心102基于从设备仲裁(arbitration)为未初始化的模块分配动态地址。例如,在各种实现中,为了确保每个模块被供应唯一的动态地址,核心102要求每个模块向核心102提供唯一的软件标识符/地址。因此,在将动态地址分配给特定的未初始化模块之前,核心102基于它们的唯一软件地址在不同的未初始化模块之间进行区分。核心102例如一次一个地为每个未初始化的模块供应动态地址,以便确保每个模块被分配唯一的动态地址。在一些实现中,动态地址的这种分配可以在先来先供应的基础上发生或者以其它合适的优先级序列或方案发生(例如,基于何时接收到来自每个模块的相应中断等)。在将动态地址分配给那些特定的初始化模块之后,核心102基于它们的唯一动态地址在不同的(现在已初始化的模块)之间区分。

在一些实现中,总线具有漏极开路(open-drain)电路系统。总线的漏极开路特性可以用于促进动态寻址。通过利用总线的漏极开路特性,如果多个模块在同一总线上通信,只要它们正在传输唯一信息,就会在LOW(低)位的数据线上产生固有优先级。例如,假设两个模块正在同时尝试协商动态地址。在其中其相应的唯一地址中的位不同的第一点处,其中一个模块将失去仲裁并重置其状态,从而停止其自己的协商,允许另一模块被首先分配动态地址。在示例场景中,假设模块A正在传输1111并且模块B正在同时传输1101。参考第一位,如果两个模块将HIGH(高)(1)写到总线,则这两个模块继续在总线上通信。类似地,参考第二位,如果两个模块将HIGH(1)写到总线,则这两个模块继续在总线上通信。参考第三位,如果模块B将LOW(0)写到总线,则模块B“战胜”将HIGH(1)写到总线的模块A。模块A注意到总线与模块A正在尝试发送的内容不匹配。因此,模块A停止传输。到目前为止由核心集线器106接收到的消息仍然与模块B正在传输的消息一致(例如,110...)。

由于这种用于将地址动态地分配给任意数量的同时连接的模块的技术,因此,从软件的角度来看,各种实现在总线上的通信方面自动地实现热交换(hot-swap)能力。活动的从设备可以用于促进使用软件动态改变地址所涉及的复杂处理。在一些实现中,这也可能利用哑(dumb)的从设备来实现。

虽然可以以特定顺序呈现步骤、操作或计算,但是在特定实现中可以改变顺序。取决于特定实现,步骤的其它顺序是可能的。在一些特定实现中,可以同时执行在本说明书中按顺序示出的多个步骤。而且,一些实现可能不具有所示的所有步骤和/或可能具有其它步骤来代替或补充本文所示的那些步骤。

在各种实现中,将模块连接到总线114的模块连接线可以包括以下线:VBUS线(例如,标称3.3V~5.0V,可能实用的3.0V~5.5V等)、接地(GND)、数据线(例如,I2C数据线、SDA数据线等)、时钟线(例如,I2C时钟线、SCL等)、正数据端子(DP)(USB数据)、负数据端子(DM)(USB数据)等。在各种实现中,地址布局或地址空间可以如下分段:0x0A至0x70–动态块地址空间,0x7C–未初始化的模块地址,0x7A–状态地址。特定的地址布局可以变化并且将取决于特定的实现。

在一些实现中,当新模块连接到总线时,新模块具有从地址0x7C(例如,未初始化的模块地址代替其动态地址)和0x7A(例如,其状态地址)。如本文所指示的,所有模块在活动时具有通用状态地址,并且状态地址在模块之间全局共享。

在各种实现中,在已经将模块添加并初始化到系统100的总线114之后,每个模块在正常操作期间同时监听至少两个地址(例如,I2C地址等)。在一些实现中,正常操作可以是后初始化(例如,在总线上初始化给定模块之后)。在一些实现中,正常操作排除在睡眠模式或深睡眠模式中花费的时间。

在一些实现中,动态地址在连接时间被分配给模块。在一些实现中,连接时间是模块最初连接到总线的时间。而且,在各种实现中,动态地址是核心102的核心集线器106与给定模块之间的数据传输的主要方法。如本文所指示的,在各种实现中,状态地址是由总线上的所有模块共享的全局地址。状态地址可以用于报告状态和引发中断的目的。

以下实现使用核心102来实现,核心102是模块化系统中的主元件,其发起与模块的通信,模块是模块化系统中的从元件。

作为主元件,当存在支持总线上的相同数据类型或能力的两个或更多个模块时,核心102控制和管理通信并避免碰撞/冲突。无论此类模块是相同的模块类型还是不同的模块类型,这都适用。例如,如果有两个LED模块连接到总线,并且用户请求“LED ON”,则核心集线器106负责协商和推断与哪个模块通信。如果不同模块类型的不同模块两者具有相同的能力(例如,“LED ON”),则同样适用。

实现使用最少的轮询来促进总线上出现的高速和优先级中断。这使得模块能够用于以高速率进行事件检测,这在某些总线(诸如I2C总线)上将通常是不可能的。示例应用可以包括模块上的按钮按压检测、GPS地理围栏(geo-fencing)等。

如本文所指示的,假设使用固定总线或已经解析了所有动态地址(例如,I2C地址),总线上的每个模块被分配给同一总线上的至少两个硬件地址,其中,在正常通信期间,每个模块响应于的两个地址。而且,总线上的每个模块在总线上具有动态地址。在一些实现中,动态地址可以是固定的总线上唯一地址。如本文所指示的,动态地址对于每个模块是唯一的,并且总线上的每个模块在总线上具有状态地址。

在一些实现中,状态地址是固定的,并且是由其它模块共享的公共地址。在一些实现中,状态地址是由所有其它模块全局共享的公共地址。被共享的状态地址可以被称为重载地址。在一些实现中,状态地址可以是未初始化模块首次连接到总线时该未初始化模块具有的相同地址。

图5示出了根据一些实现的用于促进模块化系统中的通信的示例流程图。参考图1和图5,在方框502处发起方法,其中核心102发起与总线上诸如模块104a之类的模块的通信。在各种实现中,通信经由与模块相关联的动态地址发起。为了便于示出,该特定示例假设核心102正在发起与模块104a的通信。为了便于示出,这些实现在一个模块的上下文中描述。这些实现和其它实现也可以应用于模块104b和/或一个或多个其它模块。

在各种实现中,核心102和模块之间的通信的发起涉及核心102对与模块104a相关联的动态地址执行一个或多个写操作。这种写操作可以包括正常操作期间的任何写操作(例如,发出命令、设置信息等)。如本文所指示的,在一些各种实现中,动态地址是与模块相关联的唯一地址。换句话说,每个模块被分配唯一的动态地址,使得总线上没有两个模块被分配相同的动态地址。

图6示出了根据一些实现的在写操作的上下文中的示例数据结构600。数据结构600是可以在一些实现中使用的示例外出(out-going)帧(例如,从核心102到模块104a的写入)。如图所示,数据结构600包括动态地址字段602、长度字段604、命令字段606、数据字段608和校验和字段610。括号中的数字是每字段的示例位数,其可以根据特定实现而变化。在一些实现中,长度字段604指示后面跟着的数据的长度。在一些实现中,命令字段606包含要在模块内调用的命令。命令可以由模块在内部注册并在与模块的驱动器相关联的头文件中指示。在一些实现中,数据字段608包含要作为参数(argument)传递的数据。在一些实现中,校验和字段610包含校验和字节。在接收到数据结构600的数据后,寻址的模块进入准备响应模式。在各种实现中,数据结构600可以不具有所示的字段的全部和/或可以具有其它字段来代替或补充本文所示的那些。

在方框504处,核心102确定总线上的任何其它模块是否发起了中断,并且核心102基于状态地址处的信息做出该确定。例如,在一些实现中,为了确定总线上的任何其它模块是否发起了中断,核心102对状态地址执行读取操作,并且核心102从状态地址读取状态。例如,核心102可以针对中断读取状态地址以确定是否需要初始化未初始化的模块。如本文所指示的,在各种实现中,状态地址是在模块(例如,所有模块)之间共享的公共或全局共享地址。

此时,如果没有发生中断,则核心102和模块之间的通信正常进行。在一些实现中,状态可以由预定大小(例如,一个字节)的数据指示。如果总线上的任何模块在状态地址上拉低一位(pull a bitlow),则核心102继续读取状态地址并且还确定中断模块的动态地址。然后,核心102可以适当地处理中断。

图7示出了根据一些实现的在状态检查操作的上下文中的示例数据结构700。数据结构700是可以在一些实现中使用的示例传入状态帧(例如,从模块104a的全局状态地址到核心102的读取)。如图所示,数据结构700包括状态地址字段702、状态字段704、软件地址字段706、命令字段708和校验和字段710。在各种实现中,模块在软件地址字段706中提供唯一的软件地址。在各种实现中,数据结构700可以不具有所示的字段的全部和/或可以具有其它字段来代替或补充本文所示的那些。

在方框506处,如果总线上没有其它模块发起中断,则核心102继续与模块通信。换句话说,只要没有当前中断(例如指示需要初始化另一模块),核心102就继续与模块通信。

在一些实现中,在从特定模块读取状态结果之前,核心集线器106首先检查全局状态地址以确定总线上的任何其它模块是否发起了中断。在一些实现中,在正常操作期间,处于准备响应模式的模块报告0xFE的状态(例如,正常响应状态标志)。在一些实现中,如果核心集线器106从状态地址读取0xFE,则核心集线器106知道没有其它模块正在试图引发中断,并且继续执行从模块的动态地址的读取操作。响应的结构是相同的,并且响应中的命令与被调用的命令交叉引用,以检查它是否以正确的方式响应(例如,命令匹配)。在一些实现中,如果总线上的模块试图引发中断,则当核心集线器106读取状态字节时,它将低于0xFE。因此,处于准备响应模式的模块此时将失去仲裁,并且将继续等待响应,直到请求将到期时的超时。

在各种实现中,核心102通过经由与模块相关联的动态地址通信(例如,传递信息等)来继续与模块通信(例如,交换信息、接收原始数据等)。在一些实现中,核心102通过执行从与模块相关联的动态地址的一个或多个读取操作来继续与模块的通信。

在一些实现中,通过初始写操作来发起通信。模块进入准备响应模式并意识到它即将被读取。当模块响应时,它用所请求的数据进行响应。在示例场景中,如果核心集线器106写入诸如WRITE(DYN_ADDR,GET_TEMPERATURE)之类的命令,则模块收集所请求的数据就绪并等待从例如T=GET_TEMPERATURE_DATA(),ENTER_READY_TO_RESPOND_MODE(t)被读取。核心集线器106然后执行读取操作,其中响应是T,例如,READ(DYN_ADDR)。

图8示出了根据一些实现的在读取操作的上下文中的示例数据结构800。数据结构800是可以在一些实现中使用的示例传入帧(例如,从模块104a到核心102的读取)。如图所示,数据结构800包括动态地址字段802、长度字段804、命令字段806、数据字段808和校验和字段810。在各种实现中,数据结构700可以不具有所示的字段的全部和/或者可以具有其它字段来代替或补充本文所示的那些。

虽然可以以特定顺序呈现步骤、操作或计算,但是在特定实现中可以改变顺序。取决于特定实现,步骤的其它顺序是可能的。在一些特定实现中,可以同时执行在本说明书中按顺序示出的多个步骤。而且,一些实现可能不具有所示的步骤的全部和/或可能具有其它步骤来代替或补充本文所示的那些。

在一些实现中,当模块需要引发活动请求而不是等待被轮询时,模块可以劫持状态地址的一部分。例如,当全局状态地址由核心集线器106读取时,模块可以劫持状态字节。

在一些实现中,当模块正在回复正常数据请求时,应该设置状态标志(例如,0xFE),指示其处于正常会话中。如果模块需要劫持对话,则模块可以干扰任何当前通信来改变状态标志。这将导致仲裁丢失。

在各种实现中,状态标志具有优先级。这是总线(例如,I2C总线)的线和逻辑的特性所固有的。在从设备试图在数据线(例如,SDA数据线)上设置逻辑高并且模块不能设置逻辑高的第一种情况下,模块将停止试图通信并且失去仲裁。

图9示出了根据一些实现的示例优先级表900。如图所示,优先级表900包括状态标志值和相关联的优先级。在一些实现中,可以临时定义每个状态标志值(例如,0xFE–正常响应状态标志,0x00–新模块连接标志等)。

以下是根据一些实现的、模块通过其引发中断的示例处理。模块等待总线上核心集线器106与固定地址上的任何其它模块之间的偶然通信。当目标模块开始响应时,中断模块劫持响应状态字节。这导致原始目标模块失去仲裁。然后,模块传输其软件地址和与要由核心集线器106处理的中断有关的数据。当核心集线器106识别出状态位已被更改时,核心集线器106处理中断。

在模块连接事件的情况下,序列如下进行。核心集线器106继续注册新模块的软件地址。然后,核心集线器106生成唯一的动态地址并将其传输给模块。模块将其辅助I2C地址设置为动态地址。

以下实现针对模块注册。初始地,在一些实现中,模块监听状态地址(以便引发中断)而不是其动态地址(其默认值为0x7C–未初始化)。

当模块在总线上连接之后,模块等待核心102检查总线状态的下一个时间点(例如,当核心102的核心集线器106执行从状态地址的读取操作时),并且核心102发出最高优先级中断,以发信号通知它需要初始化。

然后,模块应该开始将其唯一的软件地址或唯一的块模块标识符(UBMID)传输到核心102。在一些实现中,每个个体模块在生产/制造时被给予唯一的软件地址或ID。这确保该方法有效,因为两个未初始化的模块将不会具有相同的初始软件地址。在一些实现中,软件地址在紧跟着模块劫持以执行中断的状态字节之后的字节中。

在各种实现中,如果两个模块同时连接,则核心102利用从设备仲裁机制。在一些实现中,如果模块成功地传输其整个软件地址而不在处理中丢失仲裁,则模块确定它是可能已经这样做的唯一模块。由于UBMID是唯一的,因此其它从设备/模块在完成之前的某个点处肯定会丢失仲裁,并且因此它们的值在传输期间的某个点处偏离。

然后,模块开始监听其动态地址(例如,默认的未初始化地址0x7C)。核心集线器106首先传输它接收到的UBMID(例如,用于由模块检查以确认它是预期接收者),然后是先前定义的动态地址空间中的I2C硬件地址。然后,模块将其动态地址切换到由核心集线器106提供的地址。

在一些实现中,如果模块在传输其软件地址时丢失仲裁,则模块确定存在也正在协商地址的另一模块。失去仲裁的模块然后停止尝试与核心102通信并等待直到下一个状态包以便再次尝试引发中断。

在各种实现中,核心102要求模块104a、104b等具有进入睡眠模式或深睡眠模式的能力,其中模块减少或减慢其功能中的至少一些以节省功率。例如,在一些实现中,当处于睡眠模式时,一些模块的功能可以被减少到被唤醒的功能。在一些实现中,当处于睡眠模式时,一些模块可以执行特定功能,诸如收集来自一个或多个环境传感器的数据、将数据存储在本地模块MCU上、以及在唤醒时将数据传递到核心102。在一些实现中,核心102指示给定模块执行深睡眠。模块取消注册其固定模块地址,该地址是它与总线上所有其它非睡眠模块共享的状态地址。在各种实现中,模块保留其动态地址。

在一些实现中,当模块进入睡眠模式时,核心集线器106知道并记住哪些模块正在睡眠。当核心集线器106需要来自模块的动作时,核心集线器106可以通过与模块的动态地址通信来临时唤醒模块。例如,核心集线器106临时唤醒模块以便使得模块能够报告其连接状态。在供应动态请求之后,模块或者返回到深睡眠模式或者唤醒(例如,如果唤醒命令被发送到模块)。

在各种实现中,模块化通信框架促进了更高级应用层组件与模块之间的两种类型的通信,这些通信是一般通信和直接通信。对于任一种类型的通信,核心102用作主设备,并且模块用作从设备。

关于一般通信,应用开发人员可以请求某些类型的数据。这样的数据可以包括由传感器收集的传感器数据。如本文更详细描述的,数据类型可以包括人类生命体征数据类型,诸如心率、体温等。数据类型还可以包括定位数据类型,类型诸如纬度、经度、海拔等。数据类型还可以包括命令数据类型,诸如用于灯的数据输入命令等。在各种实现中,核心102透明地或无缝地供应所请求的数据类型的数据,因为核心102经由模块化通信框架无关地(agnostically)将这些数据供应给模块,而不需要了解正在提供它的硬件的任何具体知识。

关于直接通信,应用开发人员可以请求与给定类别的硬件直接通信。例如,应用开发人员可以经由核心102与特定硬件直接通信。

图10示出了根据一些实现的用于促进模块化系统中的一般通信的示例流程图。参考图1和图10,在方框1002处发起方法,其中核心102接收对特定数据类型的数据的请求。数据类型可以根据特定实现而变化。例如,在一些实现中,数据类型可以包括一个或多个生命体征数据类型。在一些实现中,数据类型可以包括一个或多个定位数据类型。在一些实现中,数据类型可以包括一个或多个大气数据类型。

在方框1004处,核心102确定由总线上的一个或多个相应模块支持的数据类型。在一些实现中,每个模块与一个或多个功能集合相关联,并且每个功能集合包括支持预定数据类型的至少一个数据类型功能。例如,如果数据类型是心率数据,则核心102确定哪些模块支持/提供心率数据。在另一示例中,如果数据类型是温度,则核心102确定哪些模块支持温度数据。有可能多个模块支持温度数据。因此,每个模块与一个或多个数据类型相关联。

在各种实现中,核心102通过从模块接收数据类型信息来确定由总线上的一个或多个相应模块支持的数据类型。例如,在一些实现中,核心102从每个模块接收功能的编号列表。

在一些实现中,当模块首次连接到总线时,由模块支持的数据类型可以被传送到核心102。因此,核心102在任何点处调用来自该特定模块的功能,以便从该模块接收数据。在一些实现中,当核心102接收对数据的请求时,核心102搜索当前连接的模块以确定它们中的任何模块是否支持所请求的数据类型。

在示例场景中,假设用户具有两个连接的温度传感器,并且用户转到设备上的温度监测应用。如果在模块首次连接到总线时将由模块支持的数据类型传送到核心102,那么,一旦这两个模块被连接,核心102就将识别出存在可以提供温度数据的两个模块。在一些实现中,当用户请求数据时,用户可以预先选择用户想要来自哪个传感器的数据。

如果核心102接收到对温度数据的请求,并且然后搜索当前连接的模块以确定它们中的任何模块是否支持所请求的数据类型,则核心102将扫描以找到支持该数据类型(例如,温度数据)的模块。在示例中,如果检测到支持该数据类型的两个模块,则核心102将基于预定的优先级策略或者从一个或者从两个模块提供数据。

在一些实现中,为了确定由一个或多个相应模块支持的数据类型,核心102针对每个模块确定一个或多个相关联的功能集合。然后,核心102针对每个功能集合确定一个或多个数据类型。这些数据类型由相应的模块支持。

在方框1006处,核心102选择模块中的至少一个来供应所请求的数据。在一些实现中,每个模块注册支持的数据类型的列表。可以全局定义数据类型。如本文所指示的,每个数据类型可以具有也可以被全局定义的相关联的功能集合。这些功能使得给定模块能够供应给定数据类型的数据。例如,诸如获取温度(get-temperature)功能之类的功能可以收集和供应温度数据。诸如校准温度传感器(calibrate-temperature-sensor)功能之类的功能可以校准温度功能。

在各种实现中,每个模块还可以注册该模块可以执行的枚举的功能集合(例如,功能的编号列表),以便供应或提供特定数据类型的数据。在各种实现中,给定模块可以用来提供特定的集合功能。例如,模块可以用作具有功能集合的心率监测器,例如,其收集用户的当前心率。在另一示例实现中,模块可以执行提供观赏或装饰灯的功能集合。其它实现是可能的。

这些功能可以被任意编号以提供枚举列表。总线上的核心102(主元件)可以调用该功能列表,并基于支持数据类型的功能检索特定数据类型的数据。例如,核心102可以通过数字来调用特定功能。在一些实现中,模块开发人员可以经由核心102控制模块及其相应的功能。

在各种实现中,模块可以是可穿戴的。例如,作为心率监测器模块的模块可以佩戴在用户的手腕或其它部位上。这样的心率监测器可以收集数据,该数据可以基于来自核心102的指令而供应。

在示例场景中,当开发人员请求以特定数据类型供应时,核心102可以检查连接的模块的集合以查看哪些模块支持该数据类型。然后,核心102确定或选择哪个模块将用于供应该数据类型。

在一些实现中,用于供应数据的模块的选择基于预定的优先级策略。例如,在一些实现中,优先级策略可以基于用户偏好或用户排名。在一些实现中,优先级策略可以基于可用性。在一些实现中,优先级策略可以基于性能。

在方框1008处,核心102提供来自所选择的模块的特定数据类型的数据。在各种实现中,核心102透明地或无缝地向请求的应用供应所请求的数据类型的数据。数据的供应可以是不可知的,因为核心102处理所有初始化和标准功能调用而不涉及应用开发人员。在一些实现中,核心102基于预定间隔来服务(service)数据。例如,在一些实现中,间隔可以是用户选择的。在一些实现中,间隔可以是默认间隔(例如,每x毫秒等)。

虽然可以以特定顺序呈现步骤、操作或计算,但是在特定实现中可以改变顺序。取决于特定实现,步骤的其它顺序是可能的。在一些特定实现中,可以同时执行在本说明书中按顺序示出的多个步骤。而且,一些实现可能不具有所示的步骤的全部和/或可能具有其它步骤来代替或补充本文所示的那些。

图11示出了可以用于本文描述的一些实现的示例计算系统1100的框图。例如,计算系统1100可以用于实现图1的核心102、核心集线器106、模块104a和模块104b中的任何一个或多个,以及执行本文描述的实现。在一些实现中,计算系统1100可以包括处理器1102、操作系统1104、存储器1106和输入/输出(I/O)接口1108。

在各种实现中,处理器1102可以用于实现本文描述的各种功能和特征,以及执行本文描述的方法实现。虽然处理器1102被描述为执行本文描述的实现,但是计算系统1100的任何合适的组件或组件的组合或与计算系统1100或任何合适的系统相关联的任何合适的(一个或多个)处理器可以执行所描述的步骤。本文描述的实现可以在用户设备上、服务器上或两者的组合上执行。

在各种实现中,计算系统1100还包括软件应用1110,其可以存储在存储器1106上或任何其它合适的存储位置或计算机可读介质上。软件应用1110提供使得处理器1102能够执行本文描述的实现和其它功能的指令。软件应用还可以包括引擎,诸如用于执行与一个或多个网络和网络通信相关联的各种功能的网络引擎。计算系统1100的组件可以由一个或多个处理器或硬件设备的任何组合以及硬件、软件、固件等的任何组合来实现。

为了便于示出,图11示出了用于处理器1102、操作系统1104、存储器1106、I/O接口1108和软件应用1110中的每一个的一个方框。这些方框1102、1104、1106、1108和1110可以表示多个处理器、操作系统、存储器、I/O接口和软件应用。在各种实现中,计算系统1100可以不具有所示的组件的全部和/或可以具有包括其它类型的组件的其它元件来代替或补充本文所示的那些。

图12示出了可以用于本文描述的一些实现的示例计算系统1200的框图。例如,计算系统1200可以用于实现图1的核心102、核心集线器106、模块104a和模块104b中的任何一个或多个,以及执行本文描述的实现。

在一些实现中,计算系统1200可以包括处理器1202、高速缓存1204、存储器1206、只读存储器(ROM)1208、随机存取存储器(RAM)1210和存储设备1212。如图所示,存储设备1212可以包括一个或多个模块1214、1216、1218等(标记为MOD1、MOD2、MOD3等)。计算系统1200还包括输入设备1220、输出设备1222和通信接口1224。计算系统1200还包括连接各种组件的总线1226。

在各种实现中,处理器1202可以用于实现本文描述的各种功能和特征,以及执行本文描述的方法实现。虽然处理器1202被描述为执行本文描述的实现,但是计算系统1200的任何合适的组件或组件的组合或与计算系统1200或任何合适的系统相关联的任何合适的(一个或多个)处理器可以执行所描述的步骤。本文描述的实现可以在用户设备上、服务器上或两者的组合上执行。

在各种实现中,计算系统1200可以包括软件应用,其可以存储在存储器1206上或任何其它合适的存储位置或计算机可读介质上。软件应用提供使得处理器1202能够执行本文描述的实现和其它功能的指令。软件应用还可以包括引擎,诸如用于执行与一个或多个网络和网络通信相关联的各种功能的网络引擎。计算系统1200的组件可以由一个或多个处理器或硬件设备的任何组合以及硬件、软件、固件等的任何组合来实现。

为了便于示出,图12示出了用于每个上述元件的一个方框。这些方框可以表示多个处理器、操作系统、存储器、I/O接口和软件应用。在各种实现中,计算系统1200可以不具有所示的组件的全部和/或可以具有包括其它类型的组件的其它元件来代替或补充本文所示的那些。

图13示出了可以用于本文描述的一些实现的示例计算系统1300的框图。例如,计算系统1300可以用于实现图1的核心102、核心集线器106、模块104a和模块104b中的任何一个或多个,以及执行本文描述的实现。

在一些实现中,计算系统1300可以包括处理器1302、芯片组1304、通信接口1306和RAM 1308、存储设备1310、输出设备1312、桥接器1314,以及一个或多个用户界面组件1316。

在各种实现中,处理器1302可以用于实现本文描述的各种功能和特征,以及执行本文描述的方法实现。虽然处理器1302被描述为执行本文描述的实现,但是计算系统1300的任何合适的组件或组件的组合或与计算系统1300或任何合适的系统相关联的任何合适的(一个或多个)处理器可以执行所描述的步骤。本文描述的实现可以在用户设备上、服务器上或两者的组合上执行。

在一些实现中,计算系统1300可以包括软件应用,其可以存储在存储器1306上或任何其它合适的存储位置或计算机可读介质上。软件应用提供使得处理器1302能够执行本文描述的实现和其它功能的指令。软件应用还可以包括引擎,诸如用于执行与一个或多个网络和网络通信相关联的各种功能的网络引擎。计算系统1300的组件可以由一个或多个处理器或硬件设备的任何组合以及硬件、软件、固件等的任何组合来实现。

为了便于示出,图13示出了用于每个上述元件的一个方框。这些方框可以表示多个处理器、操作系统、存储器、I/O接口和软件应用。在各种实现中,计算系统1300可以不具有所示的组件的全部和/或可以具有包括其它类型的组件的其它元件来代替或补充本文所示的那些。

本文描述的实现提供了各种益处。例如,针对模块平台的实现经由核心集线器促进模块和核心之间的通信。针对通信协议的实现促进核心和模块之间的通信、促进高速和低速模式两者、允许中断和模块检测、以及允许唤醒处于睡眠状态的模块。针对模块化框架的实现管理通信总线、管理与模块的通信、向系统通知总线事件、以及提供传感器的访问方法。

虽然本描述已经关于其特定实施例进行了描述,但是这些特定实施例仅仅是说明性的而非限制性的。示例中示出的概念可以应用于其它示例和实现。

在各种实现中,编码的软件在一个或多个非瞬态计算机可读介质中,用于由一个或多个处理器执行。当由一个或多个处理器执行时,软件可操作以执行本文描述的实现和其它功能。

可以使用任何合适的编程语言来实现特定实施例的例程,包括C、C++、Java、汇编语言等。可以采用不同的编程技术,诸如面向过程的或面向对象的编程技术。例程可以在单个处理设备或多个处理器上执行。虽然步骤、操作或计算可以以特定顺序呈现,但是这个顺序在不同的特定实施例中可以改变。在一些特定实施例中,可以同时执行在本说明书中按顺序示出的多个步骤。

特定实施例可以在非瞬态计算机可读存储介质(也称为机器可读存储介质)中实现,以供指令执行系统、装置或设备使用或与其结合使用。特定实施例可以以软件或硬件或两者的组合中的控制逻辑的形式来实现。当由一个或多个处理器执行时,控制逻辑可操作以执行本文描述的实现和其它功能。例如,有形介质(诸如硬件存储设备)可以用于存储控制逻辑,该控制逻辑可以包括可执行指令。

特定实施例可以通过使用可编程通用数字计算机和/或通过使用专用集成电路、可编程逻辑器件、现场可编程门阵列、光学、化学、生物、量子或纳米工程系统、组件和机制来实现。通常,特定实现的功能可以通过本领域已知的任何手段来实现。可以使用分布式、联网系统、组件和/或电路。数据的通信或传递可以是有线的、无线的或通过任何其它手段。

“处理器”可以包括处理数据、信号或其它信息的任何合适的硬件和/或软件系统、机制或组件。处理器可以包括具有通用中央处理单元、多个处理单元、用于实现功能性的专用电路的系统或其它系统。处理不必限于地理位置,或具有时间限制。例如,处理器可以“实时”、“离线”、以“批处理模式”等执行其功能。处理的部分可以在不同的时间和在不同的位置、由不同的(或相同的)处理系统执行。计算机可以是与存储器通信的任何处理器。存储器可以是任何合适的数据存储装置、存储器和/或非瞬态计算机可读存储介质,包括电子存储设备,诸如随机存取存储器(RAM)、只读存储器(ROM)、磁存储设备(硬盘驱动器等)、闪存,光学存储设备(CD、DVD等)、磁盘或光盘、或其它适用于存储由处理器执行的指令(例如,程序或软件指令)的有形介质。例如,诸如硬件存储设备之类的有形介质可以用于存储控制逻辑,该控制逻辑可以包括可执行指令。指令还可以包含在电子信号中和作为电子信号提供,例如,以从服务器(例如,分布式系统和/或云计算系统)交付的软件即服务(SaaS)的形式。

还将认识到的是,附图/图中描绘的元件中的一个或多个也可以以较分离或集成的方式实现,或者甚至在某些情况下被移除或呈现为不可操作,如根据特定应用是有用的。实现可以存储在机器可读介质中以允许计算机执行上述任何方法的程序或代码也在本发明的精神和范围内。

如在本文的描述中和贯穿所附的权利要求中所使用的,除非上下文另有明确说明,否则“一”、“一个”和“该”包括复数的指代。而且,如在本文的描述中以及贯穿所附的权利要求中所使用的,除非上下文另有明确说明,否则“在……中”的含义包括“在……中”和“在……上”。

因此,虽然本文已经描述了特定实施例,但是在前述公开内容中预期进行广泛的修改、各种改变和替换,并且将认识到的是,在一些情况下,在不脱离所阐述的范围和精神的情况下,特定实施例的一些特征将在没有对应的其它特征的使用的情况下被采用。因此,可以做出许多修改以使特定的情形或材料适应于基本范围和精神。

为了解释的清楚起见,在一些情况下,本技术可以被呈现为包括各个功能块,功能块包括包含设备、设备组件、体现在软件或硬件和软件的组合中的方法中的步骤或例程的功能块。

在一些实施例中,计算机可读存储设备、介质和存储器可以包括包含位流等的有线或无线信号。但是,当提到时,非瞬态计算机可读存储介质明确地排除诸如能量、载波信号、电磁波和信号本身的介质。

可以使用存储在计算机可读介质中或以其它方式从计算机可读介质获得的计算机可执行指令来实现根据上述示例的方法。这样的指令可以包括例如使得或以其它方式配置通用计算机、专用计算机或专用处理设备以执行某个功能或功能组的指令和数据。所使用的部分计算机资源可以通过网络访问。计算机可执行指令可以是例如二进制指令、中间格式指令,诸如汇编语言、固件或源代码。可以用于存储指令、所使用的信息和/或在根据所述示例的方法期间创建的信息的计算机可读介质的示例包括磁盘或光盘、闪存、具有非易失性存储器的USB设备、联网存储设备等等。

实现根据这些公开的方法的设备可以包括硬件、固件和/或软件,并且可以采用各种形状因子中的任何一种。这些形状因子的典型示例包括膝上型电脑、智能电话、小形状因子的个人计算机、个人数字助理、机架设备、独立设备等等。本文描述的功能性也可以体现在外围设备或附加卡中。以进一步的示例的方式,这样的功能性还可以在不同芯片之间的电路板上或者在单个设备中执行的不同处理中实现。

指令、用于传达这些指令的介质、用于执行它们的计算资源以及用于支持这些计算资源的其它结构是用于提供这些公开中描述的功能的手段。

虽然使用各种示例和其它信息来解释所附权利要求的范围内的方面,但是不应该基于这些示例中的特定特征或布置来暗示权利要求的限制,因为普通技术人员将能够使用这些示例导出各种各样的实现。此外,虽然可能已经用特定于结构特征和/或方法步骤的示例的语言描述了一些主题,但是应该理解的是,所附权利要求中定义的主题不必限于这些描述的特征或动作。例如,这种功能性可以不同地分布或者在除了本文标识的那些之外的组件中执行。相反,所描述的特征和步骤被公开为所附权利要求范围内的系统和方法的组件的示例。此外,记载“至少一个”集合的申明语言指示该集合中的一个成员或该集合中的多个成员满足该申明。

为了解释的清楚起见,在一些情况下,本技术可以被呈现为包括各个功能块,功能块包括包含设备、设备组件、体现在软件或硬件和软件的组合中的方法中的步骤或例程的功能块。

注意的是,在某些示例实现中,本文概述的优化和/或放置功能可以由编码在一个或多个有形的非瞬态介质中的逻辑来实现,诸如在专用集成电路(ASIC)、数字信号处理器(DSP)指令、软件(潜在地包括由处理器或其它类似机器执行的目标代码和源代码等)中提供的嵌入式逻辑。计算机可读存储设备、介质和存储器可以包括包含位流等的有线或无线信号。但是,当提到时,非瞬态计算机可读存储介质明确地排除诸如能量、载波信号、电磁波和信号本身之类的介质。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1