Mipi SoundWire Spec 详解12.1(1)

目录

12 负载传输

12.1 描述(参考性质)

12.1.1.1 大量负载传输与大量寄存器访问

12.1.1.3 端口和通道编号

12.1.2 负载采样概念

12.1.2.2 采样时钟生成

12.1.2.3 采样间隔与采样窗口

​编辑

12.1.2.4 采样间隔的分组


12 负载传输

这一节描述了 SoundWire 数据端口如何传输负载数据,通常是音频流。 注意 —— 这一节包含了一些概念性的定义,用于描述和规定负载传输机制的行为,这些定义可能不会与实际实施中的元素一一对应。例如,通道(Channel)是在数据端口中的一种逻辑概念,可能并不对应于实际实施的数据端口中的任何物理子划分。

12.1 描述(参考性质)

注意 —— 本节为参考性质的描述;它不包含任何强制性的规范。 与本主题相关的规范包含在第 12.2 节中。

SoundWire 接口的目的在于传输负载流(Payload Streams)。在一个典型的系统中,许多负载流会被复用在一起。

正常的负载流是一系列样本,通常代表音频数据。任何设备中的任何一个数据端口都可以是负载流的源端口或目的端口(目的地)。在正常使用中,一个单一的源数据端口可以是负载流的源头,但是目的地可能是多个同时接收该负载流的接收端口(Sink Data Ports)。

除了帧中的控制字所在的比特槽(BitSlots)外,帧中的所有其他比特槽都可用于传输负载流数据。特定负载流所使用的比特槽是由编程数据端口内的控制寄存器来选择的。

一组控制比特槽使用的负载位置参数使得多个负载流的复杂复用成为可能,但总体效果可以简单地视为在数据端口间建立点对点(或点对多点)连接。位于逻辑连接两端的数据端口都会以相同的方式看待负载流——识别帧中的同一组比特槽。

解释

  • 传输负载流:SoundWire 接口的主要目的是传输负载流,这些流通常包含了音频数据。
  • 样本序列:负载流通常是一系列的样本数据,代表音频信号。
  • 源端口和目的端口:任何设备中的数据端口都可以是负载流的源头或目的地。在正常使用情况下,一个源数据端口可以是负载流的源头,而目的地则可以是多个同时接收该负载流的接收端口。
  • 复用机制:在一个典型的系统中,多个负载流会被复用在一起传输。除了帧中的控制字部分,其余的所有比特槽都可以用于传输负载流数据。
  • 比特槽选择:特定负载流使用的比特槽是由数据端口内的控制寄存器编程确定的。
  • 负载位置参数:一组控制比特槽使用的负载位置参数允许进行复杂的负载流复用。这意味着可以在一个帧内高效地传输多个负载流。
  • 点对点或点对多点连接:虽然负载流复用可能很复杂,但从总体上看,这相当于建立了点对点或点对多点的连接。位于逻辑连接两端的数据端口都会以相同的方式识别和处理负载流。

综上所述,SoundWire 接口通过允许在单个数据流中复用多个负载流,实现了高效的音频数据传输,并且可以通过编程灵活地指定每个负载流在帧中的位置。

12.1.1.1 大量负载传输与大量寄存器访问

一种特殊的负载流类型,称为大量负载传输 (Bulk Payload Transport, BPT),可以用于比使用 SoundWire 控制字命令更高效地传输大量寄存器配置数据,以加快 SoundWire 从设备的配置过程,例如批量下载 DSP 程序代码或参数块。读取和写入访问是使用伴随的大规模寄存器访问 (Bulk Register Access, BRA) 协议进行编码的。BPT 还可以用于传输实现定义的协议。 BPT 数据通过控制端口 0 中可选实现的数据端口进行传输,该数据端口由控制端口 0 寄存器子集中的寄存器控制。大量负载传输和大规模寄存器访问协议在第 13 节中进行了描述。

解释

  • BPT 的作用:BPT 是一种特殊的负载流类型,它被设计用来高效地传输大量数据,比如寄存器配置数据。这在快速配置从设备时非常有用,例如当需要批量下载 DSP(数字信号处理器)程序代码或参数块时。

  • 提高效率:相比于使用 SoundWire 控制字命令逐条配置寄存器,BPT 提供了一种更快捷的方法,可以显著减少配置时间。

  • BRA 协议:这是一种伴随 BPT 使用的协议,用于编码读取和写入寄存器的操作。这意味着 BRA 协议定义了如何在 BPT 流中表示对寄存器的访问操作。

  • 扩展性:BPT 不仅仅限于配置数据,还可以用于传输实现定义的协议,这意味着它可以适应不同的应用场景。

  • 可选的数据端口:BPT 通过控制端口 0 中的一个可选实现的数据端口进行传输。这意味着 BPT 并不是所有实现都必须支持的功能,而是可以选择性实现的。

  • 控制寄存器:控制 BPT 的数据端口由控制端口 0 寄存器子集中的一组寄存器控制。这意味着对于支持 BPT 的实现,可以通过这些寄存器来配置 BPT 的行为。

12.1.1.2 传输术语快速参考指南 以下列表是对接下来各节中描述的术语的快速参考指南:

  • 采样间隔(Sample Interval):以比特槽(BitSlots)测量的采样事件的间隔。
  • 有效载荷数据间隔(Payload Data Interval):等于块组计数(BlockGroupCount)乘以采样间隔。
  • 采样窗口(Sample Window):等于连续比特槽数量的采样间隔。
  • 有效载荷数据窗口(Payload Data Window):等于连续比特槽数量的有效载荷数据间隔。
  • 采样窗口是有效载荷数据窗口的子集或等于有效载荷数据窗口:即采样窗口包含在有效载荷数据窗口内。
  • 有效载荷信道样本(Payload Channel Sample):等于样本字长度(SampleWordLength)的数据比特数。
  • 有效载荷数据容器(Payload Data Container):等于(0 或 2 加上样本字长度)的数据比特数。
  • 有效载荷数据子块(Payload Data Sub-Block):等于 1 个有效载荷数据容器。
  • 有效载荷数据块(Payload Data Block):等于(块组计数乘以通道数)的有效载荷数据容器数量。
  • 传输子帧(Transport Sub-Frame):指从 HStart 到 HStop(包括 HStart 和 HStop)列中的所有比特槽。
  • 传输子帧是帧的子集或等于帧:即传输子帧包含在帧内。
  • 有效载荷传输窗口(Payload Transport Window):等于给定有效载荷数据窗口和传输子帧交集中的所有比特槽。

传输子帧 \subseteq 帧   

即: 传输子帧是帧的一个子集或者等于帧。

有效载荷传输窗口 := 有效载荷数据窗口 \cap 传输子帧

即:有效载荷传输窗口(Payload Transport Window)是指那些既位于给定的有效载荷数据窗口(Payload Data Window)内又位于传输子帧(Transport Sub-Frame)内的所有比特槽(BitSlots)的集合。

换句话说,有效载荷传输窗口是那些同时存在于有效载荷数据窗口和传输子帧内的比特槽的集合。这意味着只有那些既位于有效载荷数据窗口内又位于传输子帧内的比特槽才会被用来传输有效载荷数据。

这样定义有效载荷传输窗口有助于确保数据被正确地传输,同时也确保了数据的传输与整个帧的结构保持一致。

12.1.1.3 端口和通道编号

设备中的正常负载数据端口从 1 开始编号,最多可达 14 个。这些端口号仅仅是标签,用于标识对应的控制和状态寄存器及其内部的比特。 同样地,数据端口内的通道从 1 开始编号,最多可达 8 个。这些通道号同样是标签,用于标识 SoundWire 寄存器中对应的控制和状态比特,以及通道样本在负载数据流中传输的顺序。 端口和通道号没有更高的层级含义。这些数字如何映射到应用层面有意义的概念(如特定设备中的输入或输出端口,或特定端口中的左声道和右声道)是由实现定义的。实现者提供的信息描述了这种映射关系,以便在 SoundWire 系统中使用。 将通道分组到数据端口中的重要性在于,同一个数据端口内的所有通道共享一套传输控制参数,因此它们具有相同的采样率和样本大小。

解释

  • 端口号:设备中的负载数据端口从 1 开始编号,最多可达 14 个。端口号只是用于标识相应控制和状态寄存器及其内部比特的标签。
  • 通道号:每个数据端口内的通道从 1 开始编号,最多可达 8 个。通道号用于标识 SoundWire 寄存器中相应的控制和状态比特,以及通道样本在负载数据流中传输的顺序。
  • 端口和通道的意义:端口和通道号本身并没有更高的层级含义。如何将这些数字映射到应用层面有意义的概念(例如特定设备中的输入或输出端口,或特定端口中的左声道和右声道)是由实现定义的。这意味着实现者需要提供信息来描述这种映射关系,以便在 SoundWire 系统中正确使用。
  • 控制参数共享:同一个数据端口内的所有通道共享一套传输控制参数。这意味着所有通道都具有相同的采样率和样本大小。这样做简化了配置,并确保了数据端口内所有通道的一致性和同步性。

12.1.2 负载采样概念

注意 —— 本节为参考性质的描述;它不包含任何强制性的规范。 与本主题相关的规范包含在第 12.2.1 节中。

12.1.2.1 负载采样 负载传输与负载样本生成的概念紧密相关。采样事件在数据端口中与 SoundWire 帧中的选定比特槽同步生成,这些采样事件的频率由一些负载传输参数控制。 SoundWire 规范没有定义数据端口在传输负载数据之外的功能。特别是,SoundWire 定义的采样事件是在时间上的概念点,它们与负载流中传输负载数据的时间有关系,但并不定义任何特定的时间点来采样外部量,例如音频信号电平。在用于负载传输的概念性采样事件与实际采样音频信号电平之间可能存在任意数量的应用特定电路和时间延迟。例如,可能存在与抽取和滤波等功能相关的电路和时间延迟。这种外部时间延迟是特定组件设计的属性,在相同配置的多个相同组件实例中具有恒定的值。 对于源数据端口,采样事件定义了样本数据可以提供传输的最晚时刻,尽管样本数据可能更早可用并存储在某种形式的 FIFO 缓冲区中。对于接收端数据端口,采样事件定义了样本数据可以呈现给外部电路的最早时刻,尽管样本数据可能在存储在某种形式的 FIFO 缓冲区后稍后呈现。

  • 采样事件:采样事件是在数据端口中与 SoundWire 帧中的选定比特槽同步发生的事件,这些事件的频率由一些负载传输参数控制。采样事件定义了负载数据传输的时间点。

  • 负载传输与采样事件的关系:SoundWire 规范并没有定义数据端口在传输负载数据之外的具体功能。采样事件是时间上的概念点,它们与负载流中传输负载数据的时间有关系,但并不直接定义采样外部量(如音频信号电平)的确切时间点。

  • 应用特定电路和时间延迟:在概念性采样事件与实际采样音频信号电平之间可能存在应用特定的电路和时间延迟。例如,可能存在与抽取和滤波等功能相关的电路和时间延迟。这种外部时间延迟是特定组件设计的属性,在相同配置的多个相同组件实例中具有恒定的值。

  • 源数据端口和接收端数据端口

    • 对于源数据端口,采样事件定义了样本数据可以提供传输的最晚时刻,尽管样本数据可能更早可用并存储在某种形式的 FIFO 缓冲区中。
    • 对于接收端数据端口,采样事件定义了样本数据可以呈现给外部电路的最早时刻,尽管样本数据可能在存储在某种形式的 FIFO 缓冲区后稍后呈现。
12.1.2.2 采样时钟生成

数据端口内的采样时钟生成可能完全由实现定义的机制控制,例如可选的实现定义寄存器,但在许多典型实现中,它至少部分地由负载传输参数——采样间隔控制。典型的 SoundWire 主设备会生成一个足够高质量的 SoundWire 时钟信号,可以用作音频采样时钟生成的参考。

  • 实现定义的机制:数据端口内的采样时钟生成可以通过实现定义的机制来进行控制。这些机制可能包括但不限于可选的实现定义寄存器。实现定义意味着具体的实现细节由各个制造商或设计者自行决定,并不被 SoundWire 规范严格规定。

  • 采样间隔参数:在许多典型的实现中,采样时钟的生成至少部分受到负载传输参数——采样间隔的控制。采样间隔定义了采样事件之间的间隔,从而间接控制了采样时钟的频率。

  • SoundWire 主设备和时钟信号:典型的 SoundWire 主设备会生成一个足够高质量的 SoundWire 时钟信号。这个时钟信号可以作为参考来生成音频采样时钟。这意味着主设备提供的时钟信号可以用来同步整个系统的采样操作,确保所有组件按照相同的节奏运行。

12.1.2.3 采样间隔与采样窗口

从一个采样事件到下一个采样事件的时间间隔被称为采样间隔(参见12.1.7.1)。它是以当前SoundWire时钟频率下的BitSlot持续时间为单位的整数倍来指定的。一个数据端口的采样间隔与其通信的数据端口相同,但与其他任何数据端口的采样间隔相互独立。 通常情况下,SoundWire帧率会被选择为系统中所有当前使用的采样事件率的整数倍,这样在一个帧内会有整数个采样间隔。然而,采样间隔可能会被选择为与帧的持续时间不成整数倍关系,它可能比帧更小或更大。 由一个采样间隔所覆盖的一组BitSlots被称为采样窗口。

图117展示了一些采样间隔的例子。

请注意,采样间隔仅仅是一组BitSlots的数量,它可以在一行的末尾环绕,并不一定与行的开始或结束对齐。

采样间隔 (Sample Interval)

  • 定义:采样间隔是指从一个采样事件到下一个采样事件之间的时间间隔。它是由当前SoundWire时钟频率下的BitSlot持续时间的整数倍来指定的。
  • 一致性:对于两个通信中的数据端口来说,它们的采样间隔是一致的,但与其他数据端口的采样间隔没有直接关系。

SoundWire帧率与采样间隔的关系

  • 选择原则:通常情况下,SoundWire的帧率会被选择为系统中所有当前使用的采样事件率的整数倍,这样在一个帧内会有整数个采样间隔。
  • 非整数倍的情况:然而,在某些情况下,采样间隔可能会被选择为与帧的持续时间不成整数倍关系,这会导致采样间隔比帧更小或更大。

采样窗口 (Sample Window)

  • 定义:由一个采样间隔所覆盖的一组BitSlots被称为采样窗口。

                                                                       图117  采样间隔

12.1.2.4 采样间隔的分组

为了便于有效地复用负载流,可以从多个采样事件中收集的数据进行分组。

注意:当数据端口使用流控传输时,这种分组是不可能的(参见12.1.8.2)。 将一到四个采样间隔的数据进行分组的总和被称为有效载荷数据间隔,而由一个有效载荷数据间隔所覆盖的一组BitSlots被称为有效载荷数据窗口。 图118展示了将一到四个采样间隔相加以形成有效载荷数据间隔,以及将一到四个采样窗口的BitSlots合并以形成有效载荷数据窗口的示例。(参见12.1.7.2中的BlockGroupCount)。

                                    图118 多组采样间隔形成一个有效载荷数据窗口

采样间隔的分组

  • 目的:为了提高负载流的复用效率,可以将多个采样事件的数据进行分组。
  • 限制:当数据端口使用流控传输时,这种分组是不可能的。

有效载荷数据间隔 (Payload Data Interval)

  • 定义:有效载荷数据间隔是指将一到四个采样间隔的数据进行分组的总和。
  • 组成:有效载荷数据间隔由一个或多个采样间隔组成,最多可以是四个采样间隔的总和。

有效载荷数据窗口 (Payload Data Window)

  • 定义:有效载荷数据窗口是指由一个有效载荷数据间隔所覆盖的一组BitSlots。
  • 示例:图118展示了将一到四个采样间隔相加以形成有效载荷数据间隔,以及将一到四个采样窗口的BitSlots合并以形成有效载荷数据窗口的示例。

注意事项

  • BlockGroupCount:有效载荷数据间隔的大小由BlockGroupCount参数控制,该参数定义了将多少个采样间隔的数据进行分组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

s多情公子s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值