知识门户

返回

5 管理接口

views | comments

管理接口#

管理接口可以理解为 CMIS 主机上的管理应用所需或可用的手段(机制),用于管理 CMIS 兼容模块;其面向主机应用的概念性服务接口可水平划分为如下几层(参见第 4.2 节中的图 4-1):

  • 管理信令层(MSL)提供管理信号,即具有直接分配(固定或可编程)管理功能的电气控制或状态信号¹,例如模块复位或中断请求。
  • 寄存器访问层(RAL)为实现管理应用的软件提供基本的 ACCESS 机制,用于从模块的直接可寻址管理内存窗口中 READ 和 WRITE 字节,其中分配的管理功能取决于所访问的地址(即寄存器映射)以及读取或写入的值。

RAL 和 MSL 的并列组合为管理应用提供了一组基本的管理机制(或原语)。

由于管理主机与被管理模块之间的物理分离,需要数据通信来通过物理互连实现 RAL 的基本 READ 和 WRITE 机制(物理互连本身有时也令人困惑地被称为管理接口)。用于此目的的垂直协议栈(参见图 4-1)中的数据通信部分称为管理通信接口(MCI),在附录 B 中指定。

注意:此垂直划分服务于抽象规范目的,不限制实现方式。特别是,对层边界上的服务和交互没有需要实现必须遵守的精确规范。

5.1 管理信令层(MSL)控制与状态信号#

**管理信令层(MSL)**由承载模块管理功能的离散控制或状态硬件信号组成。这些信号称为 MSL 信号,也称为低速信号。

以下定义的通用 MSL 信号名称用于 CMIS 规范文本中,并在附录 A 中映射到外形规格相关的信号名称。

在 CMIS 中,MSL 信号的二进制值抽象地表示为 ASSERTEDDEASSERTED

这些抽象值到物理信号值或表示的映射在附录 A 中定义。

以下 MSL 信号是 CMIS 必需的

  • 允许主机请求模块复位的控制信号(Reset
  • 允许模块向主机发出中断请求(Interrupt)的状态信号

以下 MSL 信号在 CMIS 模块中是可选的²:

  • 允许主机控制模块全部或部分上电的信号(LowPwrRequestHW

当模块没有承载外部提供的 LowPwrRequestHW 信号的专用硬件引脚时,其行为应如同 LowPwrRequestHW 信号存在且为 ASSERTED 状态。

这些管理控制信号在 CMIS 中的用法在第 6 章和第 7.8 节中描述。

注意:对于不同的硬件外形规格,可能存在具有固定或可编程含义的附加外形规格特定管理信号。此类外形规格特定的MSL 扩展可能也需要进行管理,包括通告、管理和状态报告方面,即可能需要相关的寄存器映射扩展。此类扩展在一份或多份 CMIS 补充规范中定义(参见第 2.1.2 节),相关管理寄存器分配在 CMIS 为管理此类 MSL 扩展而限制的页面上(参见第 8.8 节)。

在硬件规范中有时称为低速信号。对于可选的 MSL 控制信号,当没有电气引脚或触点承载 MSL 控制信号时,明确规定了模块假定的信号值。用于指示模块存在或在共享 MCI 上选择模块作为目标的信号(ModSel)可能存在也可能不存在。后者被视为 MCI 定义的一部分。

5.2 管理寄存器访问层(RAL)#

对模块可寻址内存的读写访问(如第 7.8 节所述)是主机可用的基本模块管理操作。这些用于内存或寄存器访问的操作通过管理通信接口(MCI)上的事务来实现(仿真),MCI 在第 10.2 节和附录 B 中描述。

5.2.1 可寻址内存中的寄存器#

主机直接可寻址的管理内存由 256 字节组成,分为两个段,分别称为低位内存(Lower Memory,字节地址 00h 至 7Fh)和高位内存(Upper Memory,字节地址 80h 至 FFh)。

注意:CMIS 模块的(间接)可访问管理内存通常更大,但需要高位内存的动态映射机制,该机制在第 7.8 节中描述。

在本节其余部分,对模块直接可寻址管理内存的读写访问简称为寄存器访问(ACCESS)。

5.2.2 可寻址内存的寄存器访问方法#

注意:以下 READ、WRITE 和 TEST 原语的定义仅用于规范目的,并不意味着软件实现必须使用具有该签名接口的驱动程序。

与管理寄存器访问相关的时序规范参见第 10.2 节。

5.2.2.1 读访问(READ)#

读访问可以通过以下抽象函数建模:

VALUE = READ( [ByteAddress,] N), 1 ≤ N ≤ Nmax

主机可以在一次 READ 访问中读取 N 字节的可寻址模块管理内存。

默认情况下,Nmax = 8。当支持全页读取(在 01h:251.4 中通告)时,Nmax = 128。

注意:全页读取将来可能成为必需特性。建议支持该功能。

注意:当在第 7.8 节中明确指定时,允许 READ 超过 8 字节。

读访问的起始字节地址由主机可选指定(ByteAddress)。如果省略,模块使用内部维护的当前字节地址作为起始字节地址(参见第 B.1 节)。

成功的 READ 访问通过 VALUE 返回 N 个字节。

READ 的副作用(例如读后清除)可能针对特定字节进行指定(参见第 7.8 节)。此类副作用不保证在 READ 完成时即已完成。

READ 访问可能被模块临时拒绝,原因包括第 5.2.4 节中指定的通用原因和第 7.8 节中指定的特定原因。

被拒绝的 READ 通过返回一个与成功 READ 返回的所有可能 VALUE 字节串不同的抽象 REJECTED 值来建模。

注意:语法或表示细节在此并不重要,但 REJECTED 值可以设想为,例如,超出 X8 子范围(代表可能的字节值)的 X16 值。

被拒绝的 READ 访问可以简单地重试直至最终成功。

5.2.2.2 写访问(WRITE)#

写访问可以通过以下抽象函数建模:

SUCCESS = WRITE( ByteAddress, VALUE, [VALUE, …])

成功的 WRITE 将最多八个给定字节值的序列写入模块的可寻址内存,从给定的 ByteAddress 开始,并返回 SUCCESS = TRUE。

注意:当在第 7.8 节中明确指定时,允许 WRITE 超过 8 字节。

WRITE 访问可能被模块临时拒绝,原因包括第 5.2.4 节中指定的通用原因和第 7.8 节中指定的特定原因。

被拒绝的 WRITE 访问对目标无影响,通过返回 SUCCESS = FALSE 来建模。

被拒绝的 WRITE 访问可以简单地重试直至最终成功。

主机不应在同一次 WRITE 访问中混合易失性和非易失性寄存器。

5.2.2.3 测试访问(TEST)#

除某些已通告的最大持续时间外,主机无法预先知道模块何时保证准备好接受下一次 READ 或 WRITE 而不被拒绝。

除了直接尝试和重试所需的访问外,主机可以显式测试模块就绪状态。

此访问就绪性测试可以通过以下伪函数建模:

ACCESSIBLE = TEST( )

TEST 访问简单地返回模块是否准备好接受 WRITE 或 READ 访问。

注意:TEST 是第 B.2.5.5 节中 I2CMCI 确认轮询原语的寄存器层抽象。

5.2.3 寄存器访问拒绝(访问保持延迟)#

任何 READ 或 WRITE 寄存器访问都可能被模块临时拒绝,原因包括第 5.2.4 节中指定的通用原因和第 8 章中单独指定的特定原因。

主机有多种处理临时访问拒绝的选项。主机可以:

  • 基于最坏情况时序规范调度访问(参见第 10 章)
  • 对被拒绝的访问执行重试直至最终成功
  • 在 READ 或 WRITE 访问之前进行 TEST 就绪性检测(即确认轮询)

5.2.4 寄存器访问排序与同步要求#

注意:本节的规范仅限于对可寻址管理内存的基本 READ 和 WRITE 访问。管理应用层交互(例如高位内存内容切换、CDB、VDM 等)的排序和同步要求在第 7 章和第 7.8 节中描述。

在 WRITE 访问之后,模块确保对所有具有常规读写(RW)访问类型的寄存器满足以下回读条件

当需要满足这些回读条件时,目标会临时拒绝进一步的 READ 或 WRITE 访问,拒绝的最长 ACCESS 保持延迟时间在第 10 章中指定。

注意:WRITE 访问对寄存器的修改通常会导致模块或其行为中的一些预期效果。与大多数基于寄存器的接口一样,这些效果的完成与 WRITE 访问的结束不同步,也不通过通用机制确认。在需要确认或同步的情况下,必须使用寄存器映射的专用元素(如特定状态指示器、标志位、握手位等)实现握手或信令机制。

单字节回读条件:在对具有 RW 访问类型的字节地址进行正常终止的 WRITE 之后,紧随其后的对该同一字节地址的成功 READ 将返回刚写入的值。

多字节回读条件:在对具有 RW 访问类型的字节地址范围进行正常终止的 WRITE 之后,紧随其后的对该字节地址范围任意部分的成功 READ 将返回该部分刚写入的值。

注意:MCI 机制(参见第 B.2.6 节)可被模块用于拒绝延迟后续的 ACCESS,方式是在回读条件尚未满足时通过拒绝或内部延迟(时钟拉伸)后续事务。

5.2.5 寄存器数据一致性#

数据一致性是指对给定关注字节范围的 READ 或 WRITE 访问的模块功能,确保对该字节范围的并发访问(由主机从外部和由模块从内部)以原子方式执行(不可分割且相互排斥),从而对整个字节范围的并发访问实际上是串行化的且无干扰。无论是模块还是主机都不会”看到”支持数据一致性的部分更新字节范围。

单字节 READ 访问和单字节 WRITE 访问均保证数据一致性。

5.2.5.1 大小匹配多字节 READ 结果的一致性#

对单个标量多字节只读寄存器(如第 7.8 节所指定)的大小匹配 READ 访问是原子的,并提供一致的结果,即模块确保在对该多字节寄存器进行大小匹配 READ 期间不更新标量只读寄存器的各部分。

此要求特别适用于当主机分别以单次 2 字节、4 字节或 8 字节 READ 读取任何标量 2 字节、4 字节或 8 字节状态或监控寄存器时。

注意:已定义的标量多字节数据类型(如 F16、U16、S16、U64、X16 等)列表参见第 3.4 节。

对其他多字节寄存器、多个寄存器或寄存器数组的 READ 访问不保证一致性。

如果数据一致性未得到保证但有需要,则会明确指定更高层级的访问同步规则,例如使用寄存器映射中专用生产者-消费者握手位的协议。

注意:在此类情况下缺少访问同步规则将被视为规范缺陷。显式访问同步协议的示例由第 7.2 节和第 8.23 节中描述的 CDB 命令消息发送/接收协议和 CDB 应答消息发送/接收协议给出。

5.2.5.2 多字节 WRITE 操作的一致性#

多字节 WRITE 访问(参见第 B.2.5.4 节)通常不是原子的,除非明确指定。

注意:大多数可写字节寄存器为单字节大小。明确指定不可分割访问的多字节寄存器示例包括 CDB 消息中的 PageMapping 寄存器和 CMDID 字段。

如果数据一致性未得到保证但有需要,则会明确指定更高层级的访问同步规则,例如使用寄存器映射中专用触发或握手字段的协议。

注意:在此类情况下缺少访问同步规则将被视为规范缺陷。访问同步协议的示例包括将配置数据分组为控制集(Control Sets)(参见第 6.2.3 节)或在触发发送 CDB 命令消息之前的消息组合阶段(参见第 8.23 节)。

Comment seems to stuck. Try to refresh?✨