一种具有数据链路层协议的I2C接口读卡器的制作方法

文档序号:25022983发布日期:2021-05-11 16:47阅读:100来源:国知局
一种具有数据链路层协议的I2C接口读卡器的制作方法
本发明涉及智能卡领域的一种读卡器,具体涉及一种具有数据链路层协议的i2c接口读卡器。
背景技术
:随着智能网联汽车的发展,该领域越来越多使用智能卡和se(secureelement,安全元件),为了使传统汽车行业的通讯协议更好的与智能卡和se进行兼容,同时考虑到不同的mcu的i2c接口功能实现差异,本发明提出了一种数据链路层协议,用于完成传统汽车行业的i2c接口应用与智能卡应用指令的融合,这样可以减少两者对自身原有机制的修改,促进产品融合。为了方便智能卡和se的验证、生产和开发调试,本发明设计了一种具有标准i2c接口并内嵌上述数据链路层协议的读卡器,可通过i2c接口与智能卡、se进行通讯,并在数据交互的过程中对上述链路层协议进行解析,从而完成数据块的交互、完整性校验和纠错等功能。技术实现要素:针对现有技术中存在的缺陷,本发明的目的在于提供一种具有数据链路层协议的i2c接口读卡器,可以实现读卡器与智能卡、se的指令交互、完整性校验和传输纠错等功能。为实现上述目的,本发明采用的技术方案如下:一种具有数据链路层协议的i2c接口读卡器,所述读卡器包括:带有i2c接口和usb接口的主控芯片,所述主控芯片通过所述i2c接口与所述se设备连接,所述i2c接口包括sda数据引脚、scl时钟引脚以及sct控制引脚,所述sct控制引脚用于接收所述se设备发送的通知,根据所述通知确定是否可以接收或发送数据;所述i2c接口的物理层传输协议包括数据链路层协议,所述数据链路层协议的数据帧包括依次排列的nad字段、pcb字段、len字段、data字段和crc字段,其中所述nad字段和所述pcb字段的长度为一个字节,所述len字段和所述crc字段的长度为两个字节;所述nad字段用于标识数据的收发方;所述len字段用于标识所述data字段的长度;所述crc字段用于计算所述nad字段、所述pcb字段、所述len字段和所述data字段的所有数据;所述数据链路层协议包括三种数据块:i块、r块和s块,所述三种数据块均包括依次排列的pcb字段、len字段、data字段和crc字段;所述i块用于实际发送数据,所述i块的块号为0或1且依次循环使用;所述r块用于接收数据异常时通知对方,所述r块的块号为0或1且依次循环使用;所述s块用于协议控制。进一步,如上所述的读卡器,所述s块包括超时等待s块和协议同步s块,所述超时等待s块用于在所述se设备执行过程中,在预设等待时间内发送给所述主控芯片,通知所述主控芯片端继续等待;所述协议同步s块用于所述主控芯片端发起协议同步功能。进一步,如上所述的读卡器,所述主控芯片发送数据是指所述主控芯片向所述se设备发送apdu指令,所述主控芯片接收数据是指所述se设备向所述主控芯片返回apdu响应;所述主控芯片的数据接收过程包括:所述主控芯片使用第一条读指令读取所述se设备期望返回给所述主控芯片的数据长度,所述主控芯片使用第二条读指令基于所述数据长度从所述se设备中读取对应长度的数据。进一步,如上所述的读卡器,所述主控芯片端的收发数据流控制过程包括:所述主控芯片,(1.1)在检测到自身的sct控制引脚为高电平时,确认可以发送apdu指令;(1.2)在检测到自身的sct控制引脚为低电平时,确认可以接收所述se设备返回的响应;(1.3)在需要发送apdu指令且检测到自身的sct控制引脚为低电平时,进行报错并对所述se设备进行复位操作;(1.4)在发送完apdu指令之后,若超过所述预设等待时间且未收到所述se设备的任何响应,则进行报错并对所述se设备进行复位操作。进一步,如上所述的读卡器,所述主控芯片端的收发数据流控制过程还包括:所述主控芯片,(1.5)在初始时,将当前块号置为0,当前状态置为待发送状态;(1.6)在发送i块给所述se设备,并正确接收所述se设备返回的i块响应之后,将当前块号翻转;(1.7)在发送协议同步s块给所述se设备之后,(1.7.1)若接收到所述se设备返回的协议同步s块响应,则将当前块号置为0,将当前状态置为待发送状态;(1.7.2)若未接收到所述se设备返回的协议同步s块响应,则重发步骤(1.7)中的协议同步s块,若重发次数达到预设次数还未接收到正确的协议同步s块响应,则进行报错并对所述se设备进行复位操作。进一步,如上所述的读卡器,所述主控芯片端的收发数据流控制过程还包括:所述主控芯片,(1.8)在发送完apdu指令之后,在所述预设等待时间内,(1.8.1)在接收到所述se设备返回的超时等待s块响应之前,若继续发送下一条apdu指令则所述se设备返回r(n)块响应;n为0或1;(1.8.2)在接收到所述se设备返回的超时等待s块响应之前,若接收到所述se设备返回的r(n)块响应,则判断接收到的r(n)块响应的块号与当前块号是否一致,若一致则重传上一条指令,否则发送r(n)块给所述se设备;(1.8.3)在接收到所述se设备返回的正确的超时等待s块响应之后,重置所述预设等待时间,继续等待,若接收到错误的超时等待s块响应,则发送r(n)块给所述se设备,要求所述se设备重传;(1.8.4)若接收到所述se设备返回的正确的i块响应,且块号与当前块号一致,则此次apdu指令交互结束,将当前块号翻转,准备发送下一条指令;(1.8.5)若接收到其他块或发生错误,则发送r(n)块给所述se设备,要求所述se设备重传。进一步,如上所述的读卡器,所述se设备端的收发数据流控制过程包括:所述se设备,(2.1)在所述主控芯片对所述se设备上电时,将所述主控芯片的sct控制引脚置为高电平;(2.2)在接收到所述主控芯片发送的apdu指令并处理完成后,向所述主控芯片返回apdu响应时,将所述主控芯片的sct控制引脚置为低电平;(2.3)在所述主控芯片完全读取所述se设备期望返回的数据之后,将所述主控芯片的sct控制引脚置为高电平,等待接收下一条指令。进一步,如上所述的读卡器,所述se设备端的收发数据流控制过程还包括:所述se设备,(2.4)在初始时,将当前接收块号置为0,当前发送块号置为1,当前状态置为接收状态;(2.5)在初始上电时,(2.5.1)若接收到所述主控芯片发送的i块,则设置超时等待s块计时器时间为预设时间,转由后续指令处理;(2.5.2)若接收到所述主控芯片发送的协议同步s块,则返回协议同步s块响应,恢复为初始状态;(2.5.3)若接收到其他块或发生错误,则返回r(n)块响应通知错误。进一步,如上所述的读卡器,所述se设备端的收发数据流控制过程还包括:所述se设备,(2.6)若接收到所述主控芯片发送的正确的i块,且块号与当前接收块号一致,则表示接收成功,将当前接收块号和当前发送块号翻转;(2.7)在接收到所述主控芯片发送的正确的i块之后,设置超时等待s块计时器时间为所述预设时间,转由后续指令处理,此时,(2.7.1)若指令执行完成,则拉低所述主控芯片的sct控制引脚,准备发送i块;(2.7.2)若接收到所述主控芯片发送的r(n)块,则返回r(n)块响应通知错误;(2.7.3)若接收到所述主控芯片发送的s块,则返回r(n)块响应通知错误;(2.7.4)若接收到所述主控芯片发送的i块,则返回r(n)块响应通知错误;(2.7.5)若达到所述预设时间,则拉低所述主控芯片的sct控制引脚,返回超时等待s块响应,通知所述主控芯片继续等待;(2.8)在向所述主控芯片返回超时等待s块响应之后,(2.8.1)若指令执行完成,则拉低所述主控芯片的sct控制引脚,准备发送i块;(2.8.2)若接收到所述主控芯片发送的r(n)块,且块号与当前发送块号一致,则重传步骤(2.7.5)中的超时等待s块响应;(2.8.3)若接收到其他块或发生错误,则返回r(n)块响应通知错误。进一步,如上所述的读卡器,所述se设备端的收发数据流控制过程还包括:所述se设备,(2.9)在发送i块给所述主控芯片之后,(2.9.1)若接收到所述主控芯片发送的i块,则判断接收到的i块的块号与当前接收块号是否一致,若不一致则返回r(n)块响应通知错误,若一致则将当前接收块号翻转;(2.9.2)若接收到所述主控芯片发送的r(n)块,则判断接收到的r(n)块的块号与当前发送块号是否一致,若一致则重传步骤(2.9)中的i块,若不一致则返回r(n)块响应通知错误;(2.9.3)若接收到其他块或发生错误,则返回r(n)块响应通知错误;(2.9.4)若接收到所述主控芯片发送的协议同步s块,则返回协议同步s块响应,恢复为初始状态。本发明的有益效果在于:本发明在原有i2c接口双线协议中增加了sct控制引脚,用于se设备通知读卡器此时是否可以接收或发送数据,还在原来的物理层传输协议中增加了数据链路层协议,可以通过链路层协议实现读卡器与智能卡、se的指令交互、完整性校验和传输纠错等功能。附图说明图1为本发明实施例中提供的一种具有数据链路层协议的i2c接口读卡器与se设备连接的结构示意图;图2为本发明实施例中提供的一种具有数据链路层协议的i2c接口读卡器的电路原理图;图3为本发明实施例中提供的usb接口与上位机交互的流程图;图4为本发明实施例中提供的i2c接口读卡器与se交互的流程图。具体实施方式为使本发明解决的技术问题、采用的技术方案和达到的技术效果更加清楚,下面将结合附图对本发明实施例的技术方案作进一步的详细描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,均属于本发明保护的范围。一、i2c接口读卡器的硬件电路考虑到可能出现的mcu差异,为了降低功耗、增加灵活性以及扩展性,我们在原有的i2c双线协议中增加了sct控制引脚,用于se设备通知读卡器此时是否可以接收或发送数据。当主设备检测到sct引脚为高电平时,可以进行数据发送操作,检测到sct引脚为低电平时,可以进行数据接收操作,其连接如图1所示,本实施例中,读卡器硬件部分使用了一颗带有i2c接口的mcu芯片作为主控芯片(任何一种带有i2c和usb接口的mcu均可),用于提供usb物理接口和i2c物理接口的硬件实现,使用主控芯片自带的gpio接口作为sct信号使用。电路使用排针引出主控芯片引脚,可通过转接板连接到智能卡或se,电路中增加了部分保护电路,其原理图如图2所示。基于上述硬件电路设计和电路原理图,如图1所示,本发明实施例提供一种具有数据链路层协议的i2c接口读卡器,包括:带有i2c接口和usb接口的主控芯片,主控芯片通过i2c接口与se设备连接,i2c接口包括sda数据引脚、scl时钟引脚以及sct控制引脚,sct控制引脚用于接收se设备发送的通知,根据通知确定是否可以接收或发送数据。本实施例中,i2c接口的物理层传输协议包括数据链路层协议,具体设计如下所述。二、数据链路层协议1、数据格式本实施例中,数据链路层协议的数据帧包括依次排列的nad字段、pcb字段、len字段、data字段和crc字段,其中nad字段和pcb字段的长度为一个字节,len字段和crc字段的长度为两个字节;一个字节存储8位无符号数,储存的数值范围为0-255。nad字段用于标识数据的收发方,其中,主机(主控芯片)向从机(se设备)发送的数据块的nad字段标识为0x5a,从机返回的数据块的nad字段标识为0xa5;len字段用于标识data字段的长度;crc字段用于计算nad字段、pcb字段、len字段和data字段的所有数据,即nad+pcb+len+data的所有数据,使用多项式x16+x12+x5+1计算,x为任意16进制数,初始向量为全零。由于原有的i2c协议接收方只能通过ack信号了解接收是否完成,因此加入crc字段可以解决数据传输过程中的完整性和一致性校验问题。数据链路层协议包括三种数据块:i块、r块和s块,三种数据块均包括依次排列的pcb字段、len字段、data字段和crc字段,三种数据块通过pcb字段进行区分,如下表所示:表一b8b7b6b5b4b3b2b1说明00xxxxxxi块10xxxxxxr块11xxxxxxs块i块用于实际发送数据,i块的pcb字段的第五个比特用于标识块号,该块号为0或1且依次循环使用,其分类如下表所示:表二b8b7b6b5b4b3b2b1说明00x0xxxxi(0)块,块号为000x1xxxxi(1)块,块号为1r块用于接收数据异常时通知对方,r块的pcb字段的第五个比特用于标识块号,该块号为0或1且依次循环使用,r块的len字段为0x0000,其分类如下表所示:表三b8b7b6b5b4b3b2b1说明10x0xxxxr(0)块,块号为010x1xxxxr(1)块,块号为1s块用于协议控制,s块的len字段为0x0000,其分类如下表所示:表四b8b7b6b5b4b3b2b1说明11xxxx01s(bwt)块,超时等待11xxxx10s(resynth)块,协议同步s块包括s(bwt)块和s(resynth)块,s(bwt)块用于在se设备执行过程中,在预设等待时间内发送给主控芯片,通知主控芯片端继续等待,s(resynth)块用于主控芯片端发起协议同步功能。2、数据收发方案主控芯片发送数据是指主控芯片向se设备发送apdu指令,主控芯片接收数据是指se设备向主控芯片返回apdu响应。主控芯片的数据接收过程包括:主控芯片使用第一条读指令读取se设备期望返回给主控芯片的数据长度,主控芯片使用第二条读指令基于数据长度从se设备中读取对应长度的数据。主控芯片端发送数据的格式如下表:表五s器件地址+0anadapcbalenadataacrcap其中,len长度为2字节,其数值为后续数据域长度,先发送高字节再发送低字节。例如,主控芯片端发送数据(00a4040008a000000333010101),数据流如下:s+0x26(0x13+0)+a+0x5a+a+0x00+a+0x00+a+0x0d+a+0x00+a+0xa4+a+0x04+a+0x00+a+0x08+a+a0+a+0x00+a+0x00+a+0x03+a+0x33+a+0x01+a+0x01+a+0x01+a+crch+a+crcl+a+p主控芯片端接收数据有两种模式,视mcu端软硬件功能来选择。第一种模式:数据接收由一条i2c读指令组成,适用于可以边收数据边解析的mcu,接收数据的格式如下表:表六s器件地址+1anadapcbalenadataacrca/~ap其中,len长度为2字节,其数值为后续数据域长度,先发送高字节再发送低字节。针对上述主控芯片端发送的apdu指令,智能卡或se返回数据(len字节数据6f4a84…9000)。主控芯片端发送一条读指令,数据流如下:s+0x27(0x13+1)+a+0xa5+a+0x00+a+lenh+a+lenl+a+0x6f+a+0x4a+a+0x84+a+…+0x90+a+0x00+a+crch+a+crcl+~a+p第二种模式:数据接收由两条i2c的读指令组成,适用于必须知道长度才接收数据的mcu,本实施例中的读卡器即采用了此模式。mcu先用第一条读指令从se接收两个字节的长度,得到后续se期望返回给mcu的数据长度,然后mcu发送第二条读指令读取对应长度的数据。接收数据的格式如下表七和表八:表七s器件地址+1anadapcbalena/~ap表八s器件地址+1adataacrca/~ap其中,len长度为2字节,其数值为后续数据域长度,先发送高字节再发送低字节。mcu需要发送两条读指令,第一条读取待返回数据长度,第二条读取对应长度的数据。针对上述主控芯片端发送的apdu指令,智能卡或se返回数据(len字节数据6f4a84…9000)。主控芯片端发送第一条读指令,数据流如下:s+0x27(0x13+1)+a+0xa5+a+0x00+a+lenh+a+lenl+~a+p主控芯片端继续发送第二条读指令,数据流如下:s+0x27(0x13+1)+a+0x6f+a+0x4a+a+0x84+a+…+0x90+a+0x00+a+crch+a+crcl+~a+p3、收发数据流控制(1)主控芯片端的收发数据流控制过程包括:主控芯片,(1.1)在检测到自身的sct控制引脚为高电平时,确认可以发送apdu指令;(1.2)在检测到自身的sct控制引脚为低电平时,确认可以接收se设备返回的响应;(1.3)在需要发送apdu指令且检测到自身的sct控制引脚为低电平时,进行报错并对se设备进行复位操作;(1.4)在发送完apdu指令之后,若超过预设等待时间且未收到se设备的任何响应,则进行报错并对se设备进行复位操作。(1.5)在初始时,将当前块号置为0,当前状态置为待发送状态;(1.6)在发送i块给se设备,并正确接收se设备返回的i块响应之后,将当前块号翻转;(1.7)在发送s(resynth)块给se设备之后,(1.7.1)若接收到se设备返回的s(resynth)块响应,则将当前块号置为0,将当前状态置为待发送状态;(1.7.2)若未接收到se设备返回的s(resynth)块响应,则重发步骤(1.7)中的s(resynth)块,若重发次数达到预设次数还未接收到正确的s(resynth)块响应,则进行报错并对se设备进行复位操作。(1.8)在发送完apdu指令之后,在预设等待时间内,(1.8.1)在接收到se设备返回的s(bwt)块响应之前,若继续发送下一条apdu指令则se设备返回r(n)块响应;(1.8.2)在接收到se设备返回的s(bwt)块响应之前,若接收到se设备返回的r(n)块响应,则判断接收到的r(n)块响应的块号与当前块号是否一致,若一致则重传上一条指令,否则发送r(n)块给se设备;(1.8.3)在接收到se设备返回的正确的s(bwt)块响应之后,重置预设等待时间,继续等待,若接收到错误的s(bwt)块响应,则发送r(n)块给se设备,要求se设备重传;(1.8.4)若接收到se设备返回的正确的i块响应,且块号与当前块号一致,则此次apdu指令交互结束,将当前块号翻转,准备发送下一条指令;(1.8.5)若接收到其他块或发生错误,则发送r(n)块给se设备,要求se设备重传。发生错误是指crc、nad等错误。(2)se设备端的收发数据流控制过程包括:se设备,(2.1)在主控芯片对se设备上电时,将主控芯片的sct控制引脚置为高电平;(2.2)在接收到主控芯片发送的apdu指令并处理完成后,向主控芯片返回apdu响应时,将主控芯片的sct控制引脚置为低电平;(2.3)在主控芯片完全读取se设备期望返回的数据之后,将主控芯片的sct控制引脚置为高电平,等待接收下一条指令。(2.4)在初始时,将当前接收块号置为0,当前发送块号置为1,当前状态置为接收状态;(2.5)在初始上电时,(2.5.1)若接收到主控芯片发送的i块,则设置s(bwt)块计时器时间为预设时间,转由后续指令处理;(2.5.2)若接收到主控芯片发送的s(resynth)块,则返回s(resynth)块响应,恢复为初始状态;(2.5.3)若接收到其他块或发生错误,则返回r(n)块响应通知错误。(2.6)若接收到主控芯片发送的正确的i块,且块号与当前接收块号一致,则表示接收成功,将当前接收块号和当前发送块号翻转;(2.7)在接收到主控芯片发送的正确的i块之后,设置s(bwt)块计时器时间为预设时间,转由后续指令处理,此时,(2.7.1)若指令执行完成,则拉低主控芯片的sct控制引脚,准备发送i块;(2.7.2)若接收到主控芯片发送的r(n)块,则返回r(n)块响应通知错误;(2.7.3)若接收到主控芯片发送的s块,则返回r(n)块响应通知错误;(2.7.4)若接收到主控芯片发送的i块,则返回r(n)块响应通知错误;(2.7.5)若达到预设时间,则拉低主控芯片的sct控制引脚,返回s(bwt)块响应,通知主控芯片继续等待;(2.8)在向主控芯片返回s(bwt)块响应之后,(2.8.1)若指令执行完成,则拉低主控芯片的sct控制引脚,准备发送i块;(2.8.2)若接收到主控芯片发送的r(n)块,且块号与当前发送块号一致,则重传步骤(2.7.5)中的s(bwt)块响应;(2.8.3)若接收到其他块或发生错误,则返回r(n)块响应通知错误;(2.9)在发送i块给主控芯片之后,(2.9.1)若接收到主控芯片发送的i块,则判断接收到的i块的块号与当前接收块号是否一致,若不一致则返回r(n)块响应通知错误,若一致则将当前接收块号翻转;(2.9.2)若接收到主控芯片发送的r(n)块,则判断接收到的r(n)块的块号与当前发送块号是否一致,若一致则重传步骤(2.9)中的i块,若不一致则返回r(n)块响应通知错误;(2.9.3)若接收到其他块或发生错误,则返回r(n)块响应通知错误;(2.9.4)若接收到主控芯片发送的s(resynth)块,则返回s(resynth)块响应,恢复为初始状态。(3)在主控芯片端和se设备端的收发数据流控制过程中,(3.1)当出现错误时,发送r(n)进行错误纠正的尝试测试为三次,都失败后:1)mcu主控芯片应该报错并对se设备进行复位操作;2)se设备保持当前状态,且不再响应r块;若收到正确的i块,se设备应该进行响应。(3.2)s(resynth)块只能由mcu端发起,且se端正确收到后应该回复s(resynth)块,mcu端尝试同步次数为三次,都失败后应该对se设备进行复位操作。上述se设备发送s块的时间默认设置为0.8秒,mcu端等待se设备响应的超时时间默认设置为1秒。关于一帧中传输数据最大长度,可以根据不同的项目协商定制。三、i2c接口读卡器软件实现读卡器软件主要包括usb接口与上位机之间的交互,读卡器i2c接口与se之间的交互两大部分。usb接口与上位机交互部分用以实现上位机下发指令的接收,以及指令下发和执行结果上传的功能,读卡器i2c接口与se交互部分用以实现读卡器的i2c接口驱动调用,以及数据链路层协议轮转、指令交互、完整性校验和纠错等功能。图3示出了usb接口与上位机交互部分代码流程,将读卡器从上位机接收的指令解析,并做相应的处理,如复位se、配置读卡器参数、将apdu命令搬移至下发数据缓存等操作。并通过配置返回数据n通知主程序下一步动作是发送apdu命令还是将操作结果直接返回给上位机。图4示出了读卡器i2c接口与se交互部分主要实现apdu交互流程,将读卡器从上位机接收的apdu命令转换为i块发送给se,其纠错、协议调整和重发等操作均由此程序完成。读卡器i2c接口向se发送i块,并接收se返回的数据块,判断数据块的类型:若se返回的数据块为正确i块,则保存该数据并向主流程返回1,通知主流程向上位机上传返回数据,结束;若se返回的数据块为r块,则判断块号是否发生变化,若未变化则重发i块后继续接收se返回的数据块,若变化则发送r块给se后继续接收se返回的数据块;若se返回的数据块为s块,则判断类型是否正确,若不正确则发送r块给se后继续接收se返回的数据块,若正确则继续接收se返回的数据块,其中,正确的s块只能是s(bwt);若接收到其他块或发生crc错误,则发送r块,并等待se重发,如果超过重发次数则向主流程返回err;若发送过s块请求,则判断收到的指令是否为s块响应,若是则返回0,通知主流程恢复初始状态并重发指令,若否则重发s块,如果超过重发次数则向se返回err。本发明在引用现有的i2c接口标准的基础上,提出一套完整的数据链路层协议,解决了i2c接口协议无法进行数据完整性校验、数据纠错和数据重发的问题,同时由于其底层协议贴近传统工业制造领域的接口应用,而数据链路层协议又贴近传统的安全芯片应用传输协议,上述技术方案可使双方在对自身原有机制只做较小修改的情况下进行融合,使两个传统行业的融合变得更加容易。本发明提出的一种兼容上述数据链路层协议的i2c接口读卡器,可以有效提高具有i2c接口并支持上述数据链路层协议的智能卡或se的测试、程序开发和生产效率,为此类芯片在工业领域的应用提供助力。在硬件上,i2c接口读卡器可以被车载电路板、智能卡生产设备、ft测试设备等任何带有主控芯片mcu且能提供i2c接口通讯的系统替代,在工业生产、汽车电子设备等领域有广阔的应用空间。需要补充的是,除了使用读卡器的方式,还可以通过在电路板中将mcu和se进行直连来实现上述技术方案。本领域技术人员应该明白,本发明所述的系统及方法并不限于具体实施方式中所述的实施例,上面的具体描述只是为了解释本发明的目的,并非用于限制本发明。本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围,本发明的保护范围由权利要求及其等同物限定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1