一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种用于SPI总线的通信方法、装置、设备及存储介质与流程

2022-07-16 23:13:48 来源:中国专利 TAG:

一种用于spi总线的通信方法、装置、设备及存储介质
技术领域
1.本发明涉及通信技术领域,特别是涉及一种用于spi总线的通信方法、装置、设备及存储介质。


背景技术:

2.微控制单元(microcontroller unit,mcu)和现场可编程逻辑门阵列(field programmable gate array,fpga)通过串行外设接口(serial peripheral interface,spi)总线通信,mcu作为通信master,fpga作为通信slave。mcu通过spi总线读数据的时候,不知读到的数据是正确的还是有误码的;mcu通过spi总线写数据的时候,不知对端的fpga是否收到正确的数据,对端的fpga也不知收到的数据是否正确,这样导致通信不可靠。
3.目前,为了解决上述问题,现有方法是在通信数据中增加循环冗余校验(cyclic redundancy check,crc)机制。读数据时,mcu启动通信,fpga计算出此次发送数据的crc_fpga并附在数据后面,mcu收到数据后根据收到的数据计算出数据的crc_mcu,如果crc_mcu和crc_fpga相当,表示此次读数据正确,否则此次读数据错误,需要再次启动读数据流程。而写数据时,mcu先计算出此次发送数据的crc_mcu并附在数据后面,fpga收到后计算出接收到的数据的crc_fpga,如果crc_mcu和crc_fpga相等,那么fpga接收的数据就是正确无误的;但是,此时mcu并不知fpga有没有正常接收到数据,所以mcu需要启动读数据流程把数据回读回来,如果读回来的值等于写入的值,那么写数据成功,否则写数据失败,需要再次启动写数据流程,例如:mcu要写寄存器0x12为0xaabbccdd,那么,即使mcu在数据中加入了crc,在发送完后,需要读一下寄存器0x12是不是0xaabbccdd,才知道上次写数据成功还是失败,也就是要经历一个“写数据,回读数据”即二次通信,这样的方式效率偏低。
4.因此,如何解决在写数据时效率偏低的问题,是本领域技术人员亟待解决的技术问题。


技术实现要素:

5.有鉴于此,本发明的目的在于提供一种用于spi总线的通信方法、装置、设备及存储介质,只需通过一次通信过程,就可以实现高效可靠的通信。其具体方案如下:
6.一种用于spi总线的通信方法,应用于mcu,包括:
7.对数据包的目标数据进行crc运算,得到第一校验值;
8.启动spi通信,依次向fpga发送所述目标数据中每个字节数据,以便fpga将收到的当前字节数据结合收到的上一个字节数据经crc运算得到的第二校验值再次进行crc运算,以更新所述第二校验值;
9.在发送完所述目标数据后,接收fpga更新后的所述第二校验值,并判断所述第一校验值和更新后的所述第二校验值是否一致;
10.若是,则判定fpga接收的所述目标数据有效;若否,则重新启动spi通信的操作,直至判定fpga接收的所述目标数据有效。
11.优选地,在本发明实施例提供的上述用于spi总线的通信方法中,在所述接收fpga更新后的所述第二校验值的同时,还包括:
12.向fpga发送所述第一校验值,以便fpga判断所述第一校验值和更新后的所述第二校验值是否一致;若是,则判定fpga接收的所述目标数据有效;若否,则丢弃fpga接收的所述目标数据。
13.优选地,在本发明实施例提供的上述用于spi总线的通信方法中,所述向fpga发送所述第一校验值,包括:
14.在clk时钟的指引下,通过mosi引脚向fpga发送所述第一校验值。
15.优选地,在本发明实施例提供的上述用于spi总线的通信方法中,所述接收fpga更新后的所述第二校验值,包括:
16.在clk时钟的指引下,通过miso引脚接收fpga更新后的所述第二校验值。
17.优选地,在本发明实施例提供的上述用于spi总线的通信方法中,在所述对数据包的目标数据进行crc运算之前,还包括:
18.在内存里设置设定数量字节用于存放所述数据包的空间;所述数据包的第一个字节存放header头部,除第一个字节和最后一个字节之外的其它字节存放所述目标数据;
19.在所述对数据包的目标数据进行crc运算,得到第一校验值之后,还包括:
20.将所述第一校验值放在所述目标数据的后面,以使所述数据包的最后一个字节存放所述第一校验值。
21.优选地,在本发明实施例提供的上述用于spi总线的通信方法中,还包括:
22.在向fpga发送所述目标数据中一个字节数据的同时,接收fpga发送的一个字节数据并记录在接收缓冲区。
23.优选地,在本发明实施例提供的上述用于spi总线的通信方法中,fpga进行crc运算的时间小于spi总线时钟周期。
24.本发明实施例还提供了一种用于spi总线的通信装置,应用于mcu,包括:
25.crc运算模块,用于对数据包的目标数据进行crc运算,得到第一校验值;
26.发送模块,用于启动spi通信,依次向fpga发送所述目标数据中每个字节数据,以便fpga将收到的当前字节数据结合收到的上一个字节数据经crc运算得到的第二校验值再次进行crc运算,以更新所述第二校验值;
27.接收模块,用于在发送完所述目标数据后,接收fpga更新后的所述第二校验值;
28.校验值判断模块,用于判断所述第一校验值和更新后的所述第二校验值是否一致;若是,则判定fpga接收的所述目标数据有效;若否,则重新启动spi通信的操作,直至判定fpga接收的所述目标数据有效。
29.本发明实施例还提供了一种用于spi总线的通信设备,包括处理器和存储器,其中,所述处理器执行所述存储器中存储的计算机程序时实现如本发明实施例提供的上述用于spi总线的通信方法。
30.本发明实施例还提供了一种计算机可读存储介质,用于存储计算机程序,其中,所述计算机程序被处理器执行时实现如本发明实施例提供的上述用于spi总线的通信方法。
31.从上述技术方案可以看出,本发明所提供的一种用于spi总线的通信方法,包括:对数据包的目标数据进行crc运算,得到第一校验值;启动spi通信,依次向fpga发送目标数
据中每个字节数据,以便fpga将收到的当前字节数据结合收到的上一个字节数据经crc运算得到的第二校验值再次进行crc运算,以更新第二校验值;在发送完目标数据后,接收fpga更新后的第二校验值,并判断第一校验值和更新后的第二校验值是否一致;若是,则判定fpga接收的目标数据有效;若否,则重新启动spi通信的操作,直至判定fpga接收的目标数据有效。
32.使用本发明提供的上述通信方法,在发送数据包后,可根据接收的第二校验值和自身运算得到的第一校验值来判定fpga接收的目标数据的有效性,这样写数据时只通过一次通信过程就知道是否写成功,无需再次启动通信回读来判断是否写成功,能够实现高效可靠的通信。
33.此外,本发明还针对用于spi总线的通信方法提供了相应的装置、设备及计算机可读存储介质,进一步使得上述方法更具有实用性,该装置、设备及计算机可读存储介质具有相应的优点。
附图说明
34.为了更清楚地说明本发明实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
35.图1为本发明实施例提供的用于spi总线的通信方法的流程图;
36.图2为本发明实施例提供的mcu在发送数据包的第一个字节后的过程示意图;
37.图3为本发明实施例提供的mcu在发送数据包的第一个字节后mcu和fpga的缓冲区情况示意图;
38.图4为本发明实施例提供的mcu在发送数据包的第二个字节后的过程示意图;
39.图5为本发明实施例提供的mcu在发送数据包的第二个字节后mcu和fpga的缓冲区情况示意图;
40.图6为本发明实施例提供的mcu在发送数据包的第三个字节后的过程示意图;
41.图7为本发明实施例提供的mcu在发送数据包的第三个字节后mcu和fpga的缓冲区情况示意图;
42.图8为本发明实施例提供的mcu在发送数据包的第四个字节后的过程示意图;
43.图9为本发明实施例提供的mcu在发送数据包的第四个字节后mcu和fpga的缓冲区情况示意图;
44.图10为本发明实施例提供的mcu在发送数据包的第五个字节后的过程示意图;
45.图11为本发明实施例提供的mcu在发送数据包的第五个字节后mcu和fpga的缓冲区情况示意图;
46.图12为本发明实施例提供的mcu在发送数据包的第六个字节后的过程示意图;
47.图13为本发明实施例提供的mcu在发送数据包的第六个字节后mcu和fpga的缓冲区情况示意图;
48.图14为本发明实施例提供的用于spi总线的通信装置的结构示意图。
具体实施方式
49.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
50.本发明提供一种用于spi总线的通信方法,如图1所示,包括以下步骤:
51.s101、mcu对数据包的目标数据进行crc运算,得到第一校验值;
52.需要说明的是,本发明的应用场景是mcu要写数据包中的目标数据,目标数据为data,长度为n。步骤s101是准备工作,具体由mcu把目标数据data的第一校验值crc_mcu计算出来。
53.s102、mcu启动spi通信,依次向fpga发送目标数据中每个字节数据;
54.s103、fpga将收到的当前字节数据结合收到的上一个字节数据经crc运算得到的第二校验值再次进行crc运算,以更新第二校验值;
55.具体地,mcu发送第一个字节data[1]后,此时fpga就收到了data[1],在mcu发送下一个字节前,fpga对收到的data[1]做crc运算,得到第二校验值crc_temp;
[0056]
之后mcu重复上述步骤,重复n-1次,就可以把长度为n的data发送出去,而fpga每收到一个字节都会在第二校验值crc_temp基础上做crc运算,得出新的第二校验值crc_temp。
[0057]
s104、mcu在发送完目标数据后,接收fpga更新后的第二校验值;
[0058]
具体地,mcu在发送完目标数据data后,接下来会接收fpga最后一次更新后的第二校验值crc_temp。
[0059]
s105、mcu判断第一校验值和更新后的第二校验值是否一致;
[0060]
具体地,将步骤s101得到的第一校验值crc_mcu与步骤s104接收的第二校验值crc_temp进行比较。
[0061]
若是,则执行步骤s105;若否,则重新执行步骤s102至步骤s104;
[0062]
s106、判定fpga接收的目标数据有效。
[0063]
具体地,mcu判断crc_temp和crc_mcu一致时,说明fpga收到的数据是有效的,那么这次通信就可以结束了。mcu判断crc_temp和crc_mcu不一致时,就需要重复执行步骤s102至步骤s104,直到实现一次有效的传输为止。
[0064]
在本发明实施例提供的上述用于spi总线的通信方法中,在发送数据包后,可根据接收的第二校验值和自身运算得到的第一校验值来判定fpga接收的目标数据的有效性,这样在写数据时只通过一次通信过程就知道是否写成功,无需再次启动通信回读来判断是否写成功,能够实现高效可靠的通信。
[0065]
进一步地,在具体实施时,在本发明实施例提供的上述用于spi总线的通信方法中,在执行步骤s104接收fpga更新后的第二校验值的同时,还可以包括:mcu向fpga发送第一校验值crc_mcu,此时mcu收到了第二校验值crc_temp,fpga收到了第一校验值crc_mcu。之后fpga可判断第一校验值crc_mcu和最后一次更新后的第二校验值crc_temp是否一致;若是,则判定fpga接收的目标数据有效;若否,则丢弃fpga接收的目标数据。也就是说,fpga判断第一校验值crc_mcu和最后一次更新后的第二校验值crc_temp一致时,说明fpga接收
的数据是有效的,可以使用。fpga判断第一校验值crc_mcu和最后一次更新后的第二校验值crc_temp不一致时,收到的数据是无效的,不能使用,需要丢弃。
[0066]
在具体实施时,上述步骤中mcu向fpga发送第一校验值crc_mcu,可以包括:在clk时钟的指引下,mcu通过mosi引脚向fpga发送第一校验值crc_mcu。同理,mcu依次向fpga发送目标数据中每个字节数据,也可以是在clk时钟的指引下,通过mosi引脚将目标数据中每个字节数据发送至fpga。
[0067]
在具体实施时,执行步骤s104接收fpga更新后的第二校验值,可以包括:在clk时钟的指引下,通过miso引脚接收fpga更新后的第二校验值。
[0068]
在具体实施时,在本发明实施例提供的上述用于spi总线的通信方法中,在执行步骤s101对数据包的目标数据进行crc运算之前,还可以包括:在内存里设置设定数量字节用于存放数据包的空间;数据包的第一个字节存放header头部,除第一个字节和最后一个字节之外的其它字节存放目标数据data。
[0069]
基于此,在执行步骤s101对数据包的目标数据进行crc运算,得到第一校验值crc_mcu之后,还可以包括:将第一校验值crc_mcu放在目标数据的后面,以使数据包的最后一个字节存放第一校验值crc_mcu。这样在向fpga发送数据包的最后一个字节就是发送第一校验值crc_mcu。
[0070]
mcu和fpga通信数据格式可以如表一所示:
[0071]
headerdatacrc头部,1个字节数据域,n个字节校验码,1个字节
[0072]
可以理解的是,每一个数据包都会有一个固定的header,用于标识包的开始;接下来是数据域data,最后是crc校验码,既用于校验也标识包的结束。一个数据包的总长度为n 2个字节。
[0073]
在具体实施时,在本发明实施例提供的上述用于spi总线的通信方法中,还可以包括:在mcu向fpga发送目标数据中一个字节数据的同时,mcu接收fpga发送的一个字节数据并记录在接收缓冲区。mcu接收fpga发送的每个字节数据也可以是在clk时钟的指引下,通过miso引脚进行接收。在mcu接收fpga发送的一个字节数据后,就可以向fpga发送下一个字节数据,这样提高数据传输的准确性。
[0074]
在具体实施时,在本发明实施例提供的上述用于spi总线的通信方法中,fpga进行crc运算的时间小于spi总线时钟周期。需要注意的是,spi通信速率和fpga的主频的关系,因为fpga必须要在一个spi时钟周期内把crc算出来,这样在下一个字节的传输过程中,fpga才能将计算出的crc从miso总线上发出,所以fpga算crc的时间一定要比spi总线时钟周期要短。
[0075]
假设目标数据的长度为4(即n=4),数据包的长度为6,下面以一个具体实例对本发明实施例提供的上述用于spi总线的通信方法进行详细说明,具体步骤如下:
[0076]
步骤一、mcu要写数据给fpga时,在内存里开辟一个6字节的空间用于存放此次要发送的数据包,第一个字节是固定的header,接下来4个字节是本次要发的目标数据。
[0077]
步骤二、mcu计算出数据域的crc数值crc_mcu,保存在第6个字节的位置。
[0078]
步骤三、mcu启动spi通信,clk总线上每发出1个脉冲,mosi信号就发出header上的1个bit,miso信号就收到fpga发出的1个bit;8个脉冲后,mcu就把header发送出去了,同时
收到了fpga发出的一个字节数据,这里记录为resp[1],如图2所示。这一步执行完后,mcu和fpga的缓冲区情况如图3所示。
[0079]
步骤四、mcu继续发送下一个字节数据即data[1],clk总线上发出8个脉冲后,mcu就把data[1]发送出去了,同时收到了fpga发出的一个字节数据,这里记录为resp[2],fpga收到了data[1]并计算data[1]的crc得到crc_temp,如图4所示。这一步执行完后,mcu和fpga的缓冲区情况如图5所示。
[0080]
步骤五、mcu继续发送下一个字节数据即data[2],clk总线上发出8个脉冲后,mcu就把data[2]发送出去了,同时收到了fpga发出的一个字节数据,这里记录为resp[3],fpga收到了data[2]并计算data[2]和crc_temp的crc得到一个新的crc_temp,如图6所示。这一步执行完后,mcu和fpga的缓冲区情况如图7所示。
[0081]
步骤六、mcu继续发送下一个字节数据即data[3],clk总线上发出8个脉冲后,mcu就把data[3]发送出去了,同时收到了fpga发出的一个字节数据,这里记录为resp[4],fpga收到了data[3]并计算data[3]和crc_temp的crc得到一个新的crc_temp,如图8所示。这一步执行完后,mcu和fpga的缓冲区情况如图9所示。
[0082]
步骤七、mcu继续发送下一个字节数据即data[4],clk总线上发出8个脉冲后,mcu就把data[4]发送出去了,同时收到了fpga发出的一个字节数据,这里记录为resp[5],fpga收到了data[4]并计算data[4]和crc_temp的crc得到一个新的crc_temp,如图10所示。这一步执行完后,mcu和fpga的缓冲区情况如图11所示。
[0083]
步骤八、mcu此时要发送最后一个字节即crc_mcu,clk总线上每发出1个脉冲,mosi信号就发出crc_mcu上的1个bit,miso信号就收到fpga发出crc_temp的1个bit;8个脉冲后,mcu就把crc_mcu发送出去了,同时收到了fpga发出的crc_temp;fpga收到了crc_mcu,如图12所示。这一步执行完后,mcu和fpga的缓冲区情况如图13所示。
[0084]
步骤九、fpga判断crc_mcu和crc_temp是否相等,如果不相等,说明传输过程中出现了误码,那么此次的data数据就不应该继续使用,应该丢弃;如果相等,则表示数据是有效的,可以使用。
[0085]
步骤十、mcu判断crc_mcu和crc_temp是否相等,如果相等,那么说明fpga收到了正确的数据,那么这次写操作就是成功的,可以结束本次通信了;如果不相等,就说明fpga可能没有收到正确的数据,那么就需要结束本次通信并重新启动一次写操作,直到一次成功的写操作为止。
[0086]
在执行步骤一至步骤十后,在通信的最后一个字节,mcu发送的是mcu计算的crc_mcu,fpga发送的是fpga计算的crc_temp,双方交换了自己计算的crc值,用来判断数据是否传输正确,这样在mcu写数据时不需要通过回读来判断通信是否正确,提高了通信效率。
[0087]
基于同一发明构思,本发明实施例还提供了一种用于spi总线的通信装置,由于该装置解决问题的原理与前述一种用于spi总线的通信方法相似,因此该装置的实施可以参见用于spi总线的通信方法的实施,重复之处不再赘述。
[0088]
在具体实施时,本发明实施例提供的用于spi总线的通信装置,如图14所示,具体包括:
[0089]
crc运算模块11,用于对数据包的目标数据进行crc运算,得到第一校验值crc_mcu;
[0090]
发送模块12,用于启动spi通信,依次向fpga发送目标数据中每个字节数据,以便fpga将收到的当前字节数据结合收到的上一个字节数据经crc运算得到的第二校验值再次进行crc运算,以更新第二校验值;
[0091]
接收模块13,用于在发送完目标数据后,接收fpga更新后的第二校验值;
[0092]
校验值判断模块14,用于判断第一校验值和更新后的第二校验值是否一致;若是,则判定fpga接收的目标数据有效;若否,则重新启动spi通信的操作,直至判定fpga接收的目标数据有效。
[0093]
在本发明实施例提供的上述用于spi总线的通信装置中,可以通过上述四个模块的相互作用,在发送数据包后,可根据接收的第二校验值和自身运算得到的第一校验值来判定fpga接收的目标数据的有效性,这样只通过一次通信过程就知道是否写成功,无需再次启动通信回读来判断是否写成功,能够实现高效可靠的通信。
[0094]
在具体实施时,在本发明实施例提供的上述用于spi总线的通信装置中,发送模块12,还用于向fpga发送第一校验值,以便fpga判断第一校验值和更新后的第二校验值是否一致;若是,则判定fpga接收的目标数据有效;若否,则丢弃fpga接收的目标数据。
[0095]
在具体实施时,在本发明实施例提供的上述用于spi总线的通信装置中,还可以包括:
[0096]
空间设置模块,用于在内存里设置设定数量字节用于存放数据包的空间;数据包的第一个字节存放header头部,除第一个字节和最后一个字节之外的其它字节存放目标数据;
[0097]
crc运算模块11,还可以用于将第一校验值放在目标数据的后面,以使数据包的最后一个字节存放第一校验值。
[0098]
在具体实施时,在本发明实施例提供的上述用于spi总线的通信装置中,接收模块13,还可以用于在向fpga发送目标数据中一个字节数据的同时,接收fpga发送的一个字节数据并记录在接收缓冲区。
[0099]
关于上述各个模块更加具体的工作过程可以参考前述实施例公开的相应内容,在此不再进行赘述。
[0100]
相应地,本发明实施例还公开了一种用于spi总线的通信设备,包括处理器和存储器;其中,处理器执行存储器中存储的计算机程序时实现前述实施例公开的用于spi总线的通信方法。
[0101]
关于上述方法更加具体的过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0102]
进一步地,本发明还公开了一种计算机可读存储介质,用于存储计算机程序;计算机程序被处理器执行时实现前述公开的用于spi总线的通信方法。
[0103]
关于上述方法更加具体的过程可以参考前述实施例中公开的相应内容,在此不再进行赘述。
[0104]
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置、设备、存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
[0105]
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。
[0106]
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
[0107]
综上,本发明实施例提供的一种用于spi总线的通信方法,包括:对数据包的目标数据进行crc运算,得到第一校验值;启动spi通信,依次向fpga发送目标数据中每个字节数据,以便fpga将收到的当前字节数据结合收到的上一个字节数据经crc运算得到的第二校验值再次进行crc运算,以更新第二校验值;在发送完目标数据后,接收fpga更新后的第二校验值,并判断第一校验值和更新后的第二校验值是否一致;若是,则判定fpga接收的目标数据有效;若否,则重新启动spi通信的操作,直至判定fpga接收的目标数据有效。使用上述通信方法,在发送数据包后,可根据接收的第二校验值和自身运算得到的第一校验值来判定fpga接收的目标数据的有效性,这样写数据时只通过一次通信过程就知道是否写成功,无需再次启动通信回读来判断是否写成功,能够实现高效可靠的通信。此外,本发明还针对用于spi总线的通信方法提供了相应的装置、设备及计算机可读存储介质,进一步使得上述方法更具有实用性,该装置、设备及计算机可读存储介质具有相应的优点。
[0108]
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0109]
以上对本发明所提供的用于spi总线的通信方法、装置、设备及存储介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献