大数跨境

技术洞见 | MIPI DSI协议处理器到外设方向和事务的相关介绍

技术洞见 | MIPI DSI协议处理器到外设方向和事务的相关介绍 牛芯半导体
2025-09-26
0
导读:本文转载自CSDN论坛作者G2突破手259的博客,转载文章仅供学习和研究使用。

本文转载自CSDN论坛作者G2突破手259的博客,转载文章仅供学习和研究使用。


处理器到外设方向(处理器源)
数据包数据类型


从主处理器发送到外设(如显示模块)的事务类型集合如表所示。


处理器到外设事务

详细格式描述


Sync Event (H Start, H End, V Start, V End), Data Type = XX 0001 (0xX1)
同步事件是短数据包,因此可以时序精确地表示同步脉冲的开始和结束等事件。由于“开始”和“结束”是独立和不同的事件,同步脉冲的长度以及相对于活动像素数据的位置,例如前肩和后肩显示时间,可以准确地传递到外围设备。同步事件定义如下:
  • Data Type = 00 0001 (0x01) V Sync Start
  • Data Type = 01 0001 (0x11) V Sync End
  • Data Type = 10 0001 (0x21) H Sync Start
  • Data Type = 11 0001 (0x31) H Sync End
为了尽可能准确地表示计时信息,一个V Sync Start事件表示VSA的开始,同时也意味着一个H Sync Start事件用于VSA的第一行。类似地,V Sync End 事件意味着VSA最后一行的H Sync Start事件。如果主机处理器源隔行视频,则水平同步时序遵循正在使用的视频格式的标准隔行视频约定,并且超出了本文档的范围。参见[CEA01]了解隔行视频格式的时序细节。隔行视频的第一个字段遵循相同的规则来暗示H Sync Start。外设(显示器)在接收隔行第二视频字段时,不应在V Sync Start和V Sync End时间暗示H Sync Start。
如果需要传递准确的脉冲长度信息,同步事件应该成对发生,V Sync Start 和V Sync End。或者,如果只需要单个时间点(事件),则可以将单个同步事件(通常为Sync Start)传输到外设。同步事件可以与消隐包连接在一起,以准确地传递行间定时,并避免每个事件在LPS和HS之间切换的开销。但是,请注意,将数据线保持在HS模式会有功耗损失。
显示模块不需要传统的同步/消隐/像素时序,应该以高速突发方式传输像素数据,然后将总线置于低功耗模式,以降低功耗。建议的突发大小是像素的扫描线(一行数据),它可以暂时存储在显示模块上的行缓冲区中。
同步事件有效载荷
在短数据包中有限地使用同步事件有效载荷可能会将信息从主机处理器发送到显示外设。这种技术对于单字节的有效载荷很有用,特别是当效果可能应用于帧的开始或结束,以及使用DCS Short WRITE可能不可取或不受支持时。
V Sync Start事件的数据0有效载荷应指示是否存在特殊的数据有效载荷。如果Data 0 = 0x00,外设可能会忽略剩余有效载荷字节的内容。如果Data 0 的任何位不为零,外设将根据表中定义的上下文解释Data 1负载的内容。
Video Mode
下立体显示控制(3D控制)DSI支持在Video Mode下使用显示外设观看立体图像。数据传送到显示外设的方法应该在帧的开始使用VSS中的短数据包 Data 1有效载荷来指定。主机处理器应在每次更改3D控制信息时发送3D控制信息,或更频繁地发送3D控制信息,如显示外设数据表中规定的那样。表中总结了Data 1有效负载的位。
EoTp, Data Type = 00 1000 (0x08)
这个短数据包用于指示HS传输到数据链路层的结束。因此,检测HS传输的结束可以从物理层特征解耦。[MIPI04]定义了一个EoT序列,由一系列1或0组成,这取决于HS传输中最后一个数据包的最后一位。由于潜在的错误,EoT序列可能被错误地解释为有效的数据类型。尽管预计EoT错误不会频繁发生,但添加此数据包将增强整个系统的可靠性。
符合DSI规范早期版本的设备不支持EoTp生成或检测。符合此DSI规范修订的主机或外围设备应包含支持EoTp的能力。设备还应提供特定于实现的方法来启用和禁用此功能,以确保与不支持EoTp的早期DSI设备的互操作性。
EoTp的主要目标是增强系统在HS传输模式下的整体鲁棒性。因此,DSI发送器在LP模式下传输时不应该产生EoTp。DSI接收器的数据链路层应检测和解释到达的EoTp,而不管传输模式(HS或LP模式),以便与物理层解耦。表中描述了DSI如何强制要求对不同传输和接收模式的EoTp支持。
“shall”一词用来表示为符合标准而严格遵守的强制性要求,不允许有任何偏差。
“should”一词用来表示在几种可能性中,某一个被推荐为特别合适的,而不提及或排除其他可能性;或者某一行动方案是首选的,但不一定是必需的;或者不赞成但不禁止某种行为。
与其他DSI数据包不同,EoTp具有以下固定格式:
  • Data Type = DI [5:0] = 0b001000
  • Virtual Channel = DI [7:6] = 0b00
  • Payload Data [15:0] = 0x0F0F
  • ECC [7:0] = 0x01
与EoTp相关联的虚拟通道标识符固定为0,而不管在同一传输中存在多少不同的虚拟通道。对于多通道系统,EoTp字节分布在多个通道上。
Color Mode Off Command, Data Type = 00 0010 (0x02)
Color Mode Off是一个短数据包命令,用于将Video Mode显示模块从低颜色模式返回到正常显示状态。
Color Mode On Command, Data Type = 01 0010 (0x12)
Color Mode On是一个短数据包命令,用于将Video Mode显示模块切换为低颜色模式,以节省电量。
Shutdown Peripheral Command, Data Type = 10 0010 (0x22)
Shutdown Peripheral命令是一个短数据包命令,用于关闭Video Mode显示模块的显示屏,以节省电源。请注意,为了接收打开或唤醒命令,接口必须保持通电状态。
Turn On Peripheral Command, 1215 Data Type = 11 0010 (0x32)
Turn On Peripheral命令是短数据包命令,用于打开Video Mode显示模块的显示屏,使其正常显示。
Generic Short WRITE Packet with 0, 1, or 2 parameters, Data Types = 00 0011 (0x03), 01 0011 (0x13), 10 0011 (0x23),Respectively
Generic Short WRITE命令是向外设发送通用数据的短数据包类型。此包内容的格式和解释不在本文件的范围之内。系统设计者有责任确保主处理器和外设都同意这些数据的格式和解释。
完整的数据包长度应为四个字节,包括一个ECC字节。数据类型MSB,bit[5:4],表示有效参数的个数(0,1或2)。对于单字节参数,参数将在DI 字节之后的第一个数据字节中发送,第二个数据字节将设置为0x00。
Generic READ Request with 0, 1, or 2 Parameters, Data Types = 00 0100 (0x04), 01 0100 (0x14), 10 0100 (0x24), Respectively
Generic READ Request是从外设请求数据的短数据包。这个包的参数的格式和解释,以及返回的数据,不在本文的讨论范围之内。系统设计者有责任确保主处理器和外设都同意这些数据的格式和解释。
返回的数据可以是短数据包格式或长数据包格式。注意,设置最大返回包大小命令限制返回包的大小,以便主机处理器在从外设接收数据时可以防止缓冲区溢出。如果返回的数据块大于指定的最大返回数据包大小,则读取响应将需要多次传输。如果请求的数据块大于最大数据包大小,主机处理器将在单独的传输中发送多个通用读请求。
完整的数据包长度应为四个字节,包括一个ECC字节。数据类型MSB,bit[5:4],表示有效参数的个数(0,1或2)。对于单字节参数,参数将在DI 字节之后的第一个数据字节中发送,第二个数据字节将设置为0x00。
因为这是一个读命令,BTA应该由主机处理器在这个请求之后断言。
外设应以下列方式之一响应通用读请求:
  • 如果外设检测到错误,它将发送确认和错误报告。如果检测到请求中的 ECC错误并进行了纠正,外设将发送请求的READ数据包,然后在同一传输中发送确认和错误报告数据包。
  • 如果外设没有检测到错误,它将发送请求的READ包(短数据包或长数据包),并带有适当的ECC和Checksum(如果Checksum使能)。
通用读请求应该是传输的唯一或最后一个包。在传输之后,主处理器发送 BTA。将总线的控制权交给外设后,主机处理器将期望外设发送适当的响应包,然后将总线所有权返回给主机处理器。
DCS Commands
DCS是用于Command Mode显示模块的标准化命令集。
对于DCS短命令,数据标识符字节之后的第一个字节是DCS命令字节。如果DCS命令不需要参数,则第二个有效负载字节应为0x00。
如果一个DCS命令需要多个参数,则该命令应以长数据包类型发送。
DCS Short Write Command, 0 or 1 parameter, Data Types = 00 0101 (0x05), 01 0101 (0x15), Respectively
DCS Short Write命令用于将单个数据字节写入外设(如显示模块)。数据包是由Data ID字节、DCS Write命令字节、可选参数字节和ECC字节组成的短数据包。如果有有效的参数字节,则数据类型bit 4设置为1,如果没有有效的参数字节,则设置为0。如果不需要参数,则参数字节应为0x00。如果 DCS Short Write命令,然后是BTA,被发送到一个双向外设,外设应该响应 ACK触发消息,除非在主机到外设的传输中检测到错误。如果外设在传输中检测到错误,外设应响应“确认”和“错误报告”。如果外设是单向DSI上的Video Mode显示,它应该忽略BTA。
DCS Read Request, No Parameters, Data Type = 00 0110 (0x06)
DCS READ命令用于从显示模块请求数据。该数据包是一个短数据包,由一个 Data ID字节、一个DCS Read命令、一个设置为0x00的字节和一个ECC字节组成。由于这是一个读命令,BTA应该在传输完成后由主机处理器断言。根据DCS命令字节中请求的READ类型,外设可以使用DCS短读响应或DCS长读响应进行响应。
在DCS长读响应的情况下,如果返回的数据块大于指定的最大返回数据包大小,则读取响应可以是多个数据包。在这种情况下,主机处理器应发送多个 DCS读请求命令来传输完整的数据块。
外设应以下列方式之一响应DCS READ请求:
  • 如果外设检测到错误,它将发送确认和错误报告。如果检测到请求中的 ECC错误并进行了纠正,外设将发送请求的READ数据包,然后在同一传输中发送确认和错误报告数据包。
  • 如果外设没有检测到错误,它将发送请求的READ包(短数据包或长数据包),并带有适当的ECC和Checksum,如果其中一个或两个功能都使能。
DCS读请求包应该是传输的唯一或最后一个包。在传输之后,主机处理器发送 BTA。将总线的控制权交给外设后,主机处理器将期望外设发送适当的响应包,然后将总线所有权返回给主机处理器。
DCS Long Write / write_LUT Command, Data Type = 11 1001 (0x39)
DCS Long Write/write_LUT命令用于将较大的数据块发送到执行Display Command Set的显示模块。
数据包由DI字节、两个字节的WC、ECC字节、DCS命令字节、长度为WC减去一个字节的有效负载和两个字节的校验和(CRC)组成。
Set Maximum Return Packet Size, Data Type = 11 0111 (0x37)
最大返回包大小是一个四字节的命令包(包括ECC),它指定从外设传输回主机处理器的长包中的有效负载的最大大小。设置最大返回报文大小的字节顺序为:Data ID,最大返回报文大小的两个字节值,ECC字节。注意,两个字节的值首先用LS字节传输。具有单向DSI接口的外设应忽略此命令。
在上电或复位序列期间,最大返回包大小应由外设设置为缺省值1。在开始正常操作之前,该参数应由主机处理器在初始化例程中设置为所需的值。
Null Packet (Long), Data Type = 00 1001 (0x09)
Null Packet是一种在发送虚拟数据时保持串行数据通道处于高速模式的机制。这是一个长数据包。像所有的数据包一样,它的内容应该是一个整数字节。
Null Packet由DI字节、两个字节的WC、ECC字节和WC字节的“空”负载组成,以两个字节的Checksum结束。发送的实际数据值是无关的,因为外设不捕获或存储数据。但是,需要生成ECC和Checksum并传输到外设。
Blanking Packet (Long), Data Type = 01 1001 (0x19)
消隐包用于在长数据包中传递消隐时序信息。通常,数据包表示Video Mode显示的活动扫描线之间的一段时间,其中传统的显示时序从主处理器提供给显示模块。在空白时间段内,可能会有同步事件报文穿插在空白段之间。和所有的数据包一样,Blanking Packet的内容应该是一个整数字节。
Blanking Packet可能包含任意数据作为有效载荷。Blanking Packet由DI 字节、一个两字节的WC、一个ECC字节、一个长度为WC字节的有效载荷和一个两字节的Checksum组成。
Generic Long Write, Data Type = 10 1001 (0x29)
Generic Long Write数据包用于将任意数据块以长数据包的形式从主机处理器传输到外设。数据包由DI字节、一个两字节的WC、一个ECC字节、一个长度为WC字节的有效载荷和一个两字节的Checksum组成。
Loosely Packed Pixel Stream, 20-bit YCbCr 4:2:2 Format, Data Type = 00 1100 (0x0C)
图所示的20-bit YCbCr 4:2:2格式是一种用于将图像数据格式化为每像素 20-bit传输到Video Mode显示模块的长数据包。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效载荷和一个两字节的Checksum组成。
如图所示,一个像素应该有10-bit对应Y-、Cb-和Cr-分量,松散地封装在 12-bit字段中。10-bit的分量值应该是合理的,这样12-bit字段的最高位 b[11:2]就保留了10-bit分量值d[9:0]。12-bit字段b[1:0]的最低有效位应为00b。LSB首先发送,MSB最后发送。
使用这种格式,像素边界与某些字节边界对齐。WC(以字节为单位的载荷大小)中的值应该是可以被6整除的任何非零值。WC的允许值 = {6,12,18, …65 532}。
Packed Pixel Stream, 24-bit YCbCr 4:2:2 Format, Data Type = 01 1100 (0x1C)
图所示的24-bit YCbCr 4:2:2格式是一种长数据包,用于将每像素24-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。
如图所示,一个像素应该有12-bit对应Y-、Cb-和Cr-分量。LSB首先发送,MSB最后发送。
使用这种格式,像素边界与某些字节边界对齐。WC(以字节为单位的载荷大小)中的值应该是可以被6整除的任何非零值。WC的允许值 = {6,12,18, …65 532}。
Packed Pixel Stream, 16-bit YCbCr 4:2:2 Format, Data Type = 10 1100 (0x2C)
图所示的16-bit YCbCr 4:2:2格式是一种长数据包,用于将每像素16-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。
如图所示,一个像素应该有8-bit对应Y-、Cb-和Cr-分量。LSB首先发送,MSB最后发送。
使用这种格式,像素边界与某些字节边界对齐。WC(以字节为单位的载荷大小)中的值应该是可以被4整除的任何非零值。WC的允许值 = {4,8,12, …65 532}。
Packed Pixel Stream, 30-bit Format, Long Packet, Data Type = 00 1101 (0x0D)
图所示的打包像素流30-bit格式是一种长数据包,用于将每像素30-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零 WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。像素格式依次为红色(10-bit)、绿色(10-bit)和蓝色(10-bit)。首先发送 LSB,最后发送 MSB。
这种格式使用sRGB色彩空间。但是,当色彩空间或相关格式化信息由先前的显示命令显式定义时,此数据类型可以应用于其他颜色空间或使用每像素30-bit的数据传输。例如,[MIPI01]的未来修订版可能会扩展数据类型,以包括不同于sRGB的色彩空间。格式化命令的范围和性质不在本文的讨论范围之内。
使用这种格式,像素边界与字节边界每4个像素(15个字节)对齐。总行宽(显示的像素加上未显示的像素)应该是15字节的倍数。但是,WC(以字节为单位的载荷大小)中的值不应限于能被15整除的非零值。
字节内任何不完全被像素数据使用的尾随位都应为零。例如,只有一个像素的数据包在第四个数据字节中需要两个尾随零位。如果像素RGB值为 0b1111111111 1111111111 1111111111,则第四个字节值为0x3F。整个包VC = 0b00将是0x0D 01 00 1E FF FF FF 3F B4 36。
Packed Pixel Stream, 36-bit Format, Long Packet, Data Type = 01 1101 (0x1D)
图所示的打包像素流36-bit格式是一种长数据包,用于将每像素36-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。像素格式依次为红色(12-bit)、绿色(12-bit)和蓝色(12-bit)。首先发送LSB,最后发送MSB。
这种格式使用sRGB色彩空间。但是,当色彩空间或相关格式化信息由先前的显示命令显式定义时,此数据类型可以应用于其他颜色空间或使用每像素36-bit的数据传输。例如,[MIPI01]的未来修订版可能会扩展数据类型,以包括不同于sRGB的色彩空间。格式化命令的范围和性质不在本文的讨论范围之内。
使用这种格式,像素边界与字节边界每2个像素(9个字节)对齐。总行宽(显示的像素加上未显示的像素)应该是9字节的倍数。但是,WC(以字节为单位的载荷大小)中的值不应限于能被9整除的非零值。
字节内任何不完全被像素数据使用的尾随位都应为零。例如,只有一个像素的数据包在第五个数据字节中需要四个尾随零位。如果像素RGB值为 0b111111111111 111111111111 111111111111,则第五个字节值为 0x0F。整个包VC = 0b00将是0x1D 01 00 0D FF FF FF FF 0F 4C 1C。
Packed Pixel Stream, 12-bit YCbCr 4:2:0 Format, Data Type = 11 1101 (0x3D) 
12-bit YCbCr 4:2:0格式是一种长数据包,用于将每像素12-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的Checksum组成。
一个像素应该有8-bit对应Y-、Cb-和Cr-分量。LSB首先发送,MSB最后发送。Cb-和Y-分量按奇数行发送,如图所示,Cr-和Y-分量按偶数行发送,如图所示。
WC(以字节为单位的载荷大小)中的值应该是可以被3整除的任何非零值。WC的允许值 = {3,6,9, …65 535}。
Packed Pixel Stream, 16-bit Format, Long Packet, Data Type = 00 1110 (0x0E)
图所示的打包像素流16-bit格式是一种长数据包,用于将每像素16-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零 WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。像素格式依次为红色(5-bit)、绿色(6-bit)和蓝色(5-bit)。注意,“Green”分量被分成两个字节。首先发送LSB,最后发送 MSB。
使用这种格式,像素边界与字节边界每两个字节对齐一次。总行宽(显示的像素加上未显示的像素)应该是两个字节的倍数。
通常,显示模块没有自己的帧缓冲区,因此所有图像数据应由主处理器以足够高的速率提供,以避免闪烁或其他可见的伪影。
Packed Pixel Stream, 18-bit Format, Long Packet, Data Type = 01 1110 (0x1E)
图所示的打包像素流18-bit格式是一种长数据包,用于将每像素18-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。像素格式依次为红色(6-bit)、绿色(6-bit)和蓝色(6-bit)。首先发送LSB,最后发送MSB。
注意,像素边界每4个像素(9个字节)才与字节边界对齐一次。优选地,采用这种格式的显示模块具有可被4平均整除的水平范围(以像素为单位的宽度),因此在显示行数据的末尾不会保留部分字节。如果活动(显示)水平宽度不是4个像素的倍数,则发送器应在显示线的末端发送额外的填充像素,以使传输宽度成为4个像素的倍数。当刷新显示设备时,接收外设不应显示填充像素。例如,如果显示设备具有399像素的活动显示宽度,则发送器应在一个或多个数据包中发送400像素。接收器应显示前399像素并丢弃传输的最后一个像素。
使用这种格式,总行宽(显示的像素加上未显示的像素)应该是4像素(9字节)的倍数。
Pixel Stream, 18-bit Format in Three Bytes, Long Packet, Data Type = 10 1110 (0x2E)
在18-bit像素松散封装格式中,每个R、G或B颜色分量是6-bit,但被移到字节的高有效位,这样有效的像素位就占据了每个字节的bit[7:2],如图所示。代表活动像素的每个有效负载字节的bit[1:0]被忽略。因此,每个像素在通过链路传输时需要三个字节。这比“打包”格式需要更多的带宽,但在链路两端的打包和解包功能中需要更少的移位和多路复用逻辑。
该格式用于将每像素18-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的Checksum组成。像素格式依次为红色(6-bit)、绿色(6-bit)和蓝色(6-bit)。首先发送LSB,最后发送MSB。
使用这种格式,像素边界与字节边界每三个字节对齐一次。总行宽(显示的像素加上未显示的像素)应该是三个字节的倍数。
Packed Pixel Stream, 24-bit Format, Long Packet, Data Type = 11 1110 (0x3E)
图所示的打包像素流24-bit格式是一种长数据包,用于将每像素24-bit的图像数据传输到Video Mode显示模块。数据包由DI字节、一个两字节的非零 WC、一个ECC字节、一个长度为WC字节的有效负载和一个两字节的 Checksum组成。像素格式依次为红色(8-bit)、绿色(8-bit)和蓝色(8-bit)。每个颜色组件在像素流中占用一个字节;没有组件跨字节边界拆分。首先发送LSB,最后发送MSB。
使用这种格式,像素边界与字节边界每三个字节对齐一次。总行宽(显示的像素加上未显示的像素)应该是三个字节的倍数。
DO NOT USE and Reserved Data Types
不能使用4个LSBs = 0000或1111的数据类型编码。保留所有其他未指定的数据类型编码。
注意,DT编码是指定的,以便所有数据类型在四位DT位[3:0]中至少有一个0-1或1-0转换。这确保了每个包的串行数据流的前四位之间的转换。DSI协议或PHY可以使用这些信息来快速确定,在每个数据包结束后,下一个位是代表新数据包的开始(在4位内转换)还是EoT序列(至少4位没有转换)。

往期推荐

01

牛芯半导体亮相ICDIA 2025展会,斩获“2025中国创新IC-强芯评选”生态贡献奖

▲ 点击阅读

02

牛芯半导体成功入围2024年度深圳高成长企业TOP100

▲ 点击阅读

03

牛芯DDR5 IP取得突破性进展

▲ 点击阅读


牛芯半导体(深圳)有限公司(简称“牛芯半导体”)成立于2020年,聚焦接口IP的开发和授权,并提供相关整体解决方案,致力成为全球领先的IP供应商。


牛芯半导体在主流先进工艺布局SerDes、DDR等中高端接口IP,产品广泛应用于消费电子、网络通信、数据存储、人工智能、汽车电子、医疗电子等领域。


未来,牛芯半导体持续响应IP市场需求,适应不断演进的接口技术和日益拓展的接口互联场景,赋能数智时代下的千行百业。

【声明】内容源于网络
0
0
牛芯半导体
牛芯半导体,专注于高速互联技术的研发和持续创新,拥有完全自主可控的知识产权,提供全栈式接口IP授权和高速互联芯片的定制方案,赋能芯片国产化;已服务客户超百家,涵盖智能驾驶、人工智能、特种计算等领域,致力成为全球领先的高速互联半导体公司。
内容 96
粉丝 0
牛芯半导体 牛芯半导体,专注于高速互联技术的研发和持续创新,拥有完全自主可控的知识产权,提供全栈式接口IP授权和高速互联芯片的定制方案,赋能芯片国产化;已服务客户超百家,涵盖智能驾驶、人工智能、特种计算等领域,致力成为全球领先的高速互联半导体公司。
总阅读84
粉丝0
内容96