CN114356826B - 一种基于芯片的spi单路通信方法和系统 - Google Patents
一种基于芯片的spi单路通信方法和系统 Download PDFInfo
- Publication number
- CN114356826B CN114356826B CN202111548764.0A CN202111548764A CN114356826B CN 114356826 B CN114356826 B CN 114356826B CN 202111548764 A CN202111548764 A CN 202111548764A CN 114356826 B CN114356826 B CN 114356826B
- Authority
- CN
- China
- Prior art keywords
- chip
- user data
- processing result
- data
- queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000006854 communication Effects 0.000 title claims abstract description 73
- 238000004891 communication Methods 0.000 title claims abstract description 71
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000012545 processing Methods 0.000 claims abstract description 174
- 230000002159 abnormal effect Effects 0.000 claims abstract description 81
- 230000005540 biological transmission Effects 0.000 claims abstract description 21
- 230000001360 synchronised effect Effects 0.000 claims description 28
- 238000004140 cleaning Methods 0.000 claims description 5
- 230000007717 exclusion Effects 0.000 claims description 3
- 230000002618 waking effect Effects 0.000 claims description 2
- 230000003139 buffering effect Effects 0.000 claims 1
- 230000000977 initiatory effect Effects 0.000 claims 1
- 238000012544 monitoring process Methods 0.000 claims 1
- 230000009286 beneficial effect Effects 0.000 abstract description 3
- 230000003993 interaction Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 4
- 238000012795 verification Methods 0.000 description 3
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012958 reprocessing Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Hardware Redundancy (AREA)
Abstract
本发明提出了一种基于芯片的SPI单路通信方法和系统,所述方法包括:由第一工作线程将应用层的多个用户数据依次放入发送队列;由第二工作线程依次从发送队列取出用户数据,并发送到芯片运算处理;在发送用户数据的同时,从所述芯片异步接收已完成的其它芯片处理结果,并放入接收队列;如接收芯片处理结果异常,则将异常芯片处理结果对应的用户数据作为放入重试队列;由第三工作线程从重试队列取出异常用户数据,发送到芯片,再从芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;由第四工作线程从接收队列依次读取芯片处理结果并返回给用户APP。本发明有利于充分发挥芯片片内的处理性能,提高芯片的利用率。
Description
技术领域
本发明涉及SPI通信技术领域,尤其涉及一种基于芯片的SPI单路通信方法和系统。
背景技术
随着车联网V2X技术的发展,对SE(安全芯片)SM2验签性能的要求越来越高,普遍要求2000次/秒以上。一般安全芯片片内SM2验签性能可到4000次/秒以上,但在主流AP平台上,如采用单路SPI同步通信机制,受限于系统驱动和CPU调度等多方面原因,外部实测性能很难满足要求,无法发挥安全芯片的性能。
发明内容
基于上述,有必要提供一种基于芯片的SPI单路通信方法和系统,加快应用平台与芯片之间的通信效率,有利于充分发挥芯片片内的处理性能,提高芯片的利用率。
本发明第一方面提供一种基于芯片的SPI单路通信方法,所述方法包括以下步骤:
步骤1,由第一工作线程将应用层的多个用户数据依次放入发送队列;
步骤2,由第二工作线程依次从所述发送队列取出对应的用户数据,并发送到芯片进行运算处理;在发送用户数据的同时,通过SPI全双工通信模式从所述芯片异步接收已完成其它用户数据的芯片处理结果,并放入接收队列;如接收到的芯片处理结果出现异常,则将异常的芯片处理结果对应的用户数据作为异常用户数据放入重试队列;
步骤3,由第三工作线程从所述重试队列取出异常用户数据,发送到所述芯片,再从所述芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;
步骤4,由第四工作线程从所述接收队列依次读取芯片处理结果并返回给用户APP。
本发明第二方面还提出一种基于芯片的SPI单路通信系统,所述基于芯片的SPI单路通信系统包括:应用平台和芯片,所述应用平台与所述芯片进行单路SPI通信连接;所述应用平台置入有SDK软件包,应用平台中的用户APP借助所述SDK软件包来实现调用所述芯片进行运算服务;
所述SDK软件包包括:三个队列和四个工作线程;
三个队列分别为:
发送队列:用于存放待发送的用户数据;
接收队列:用于存放芯片返回的芯片处理结果;
重试队列:用于存放需要重发的异常用户数据;
四个工作线程分别为:
第一工作线程,用于把用户数据放入发送队列;
第二工作线程,用于从所述发送队列取出对应的用户数据,并发送到芯片进行运算处理;在发送用户数据的同时,通过SPI全双工通信模式从所述芯片异步接收已完成其它用户数据的芯片处理结果,并放入接收队列;如接收到的芯片处理结果出现异常,则将异常的芯片处理结果对应的用户数据作为异常用户数据放入重试队列;
第三工作线程,用于从所述重试队列取出异常用户数据,发送到所述芯片,再从所述芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;
第四工作线程,用于从所述接收队列依次读取芯片处理结果并返回给用户APP。
本发明提出的基于芯片的SPI单路通信方法和系统,通过异步全双工通信机制,在单次SPI通信过程中,无需考虑发送的用户数据与接收的芯片处理结果是否具有相同的SN,实现异步数据交互,从而有效提升了SPI通信效率,有利于充分发挥芯片片内运算性能,提高芯片的利用率。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了本发明一种基于芯片的SPI单路通信方法的流程图;
图2示出了本发明的第二工作线程的工作流程图;
图3示出了本发明处理返回的芯片处理结果数据的流程图;
图4示出了本发明异常数据处理的流程图;
图5示出了本发明第三工作线程的工作流程图;
图6示出了本发明一种基于芯片的SPI单路通信系统的框图;
图7示出了本发明SPI全双工机制的耗时分段示意图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
图1示出了一种基于芯片的SPI单路通信方法的流程图。
如图1所示,本发明提出的基于芯片的SPI单路通信方法包括以下步骤:
步骤1,由第一工作线程将应用层的多个用户数据依次放入发送队列;
步骤2,由第二工作线程依次从所述发送队列取出对应的用户数据,并发送到芯片进行运算处理;在发送用户数据的同时,通过SPI全双工通信模式从所述芯片异步接收已完成其它用户数据的芯片处理结果,并放入接收队列;如接收到的芯片处理结果出现异常,则将异常的芯片处理结果对应的用户数据作为异常用户数据放入重试队列;
步骤3,由第三工作线程从所述重试队列取出异常用户数据,发送到所述芯片,再从所述芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;
步骤4,由第四工作线程从所述接收队列依次读取芯片处理结果并返回给用户APP。
需要说明的是,所述芯片为安全芯片,其能够提供基于SM2算法的验签功能。可以理解,SPI全双工通信模式为一种数据通信机制,发送数据的同时有接收数据返回。
本发明使用安全芯片的单路SPI外设通信接口,并通过异步全双工通信机制,即发送第一SN号的用户数据给芯片的同时,则返回第二SN号的用户数据完成的芯片处理结果,相对于传统SPI单路同步通信模式,在单次交互过程中,无需等待接收相同SN号的用户数据的芯片处理结果,从而有效提升了SPI通信效率,有利于充分发挥芯片片内运算性能。
可以理解,在通过异步全双工通信机制提升SPI通信效率的同时,还设置异常处理机制,自动处理异常用户数据,来保证用户数据与芯片处理结果之间的匹配度。
如图2所示,上述步骤2具体包括:
步骤2-1,加锁并检查是否有同步请求,如果否,则进入步骤2-2,如果是,则执行芯片数据清理过程,并进入步骤2-10;
步骤2-2,由第二工作线程判断所述发送队列是否为空,如果否,则进入步骤2-3,如果是,则进入步骤2-7;
步骤2-3,依据未接收数据包数量,判断芯片的COS是否有缓存空位,若有空位,则进入步骤2-4,若没有空位,则执行步骤2-8;
步骤2-4,由第二工作线程从所述发送队列取出用户数据,进入步骤2-5;期间如果发送队列为空,则挂起等待;
步骤2-5,将用户数据发送给芯片,同时通过SPI全双工通信模式接收芯片返回的已完成其它用户数据的芯片处理结果,判断是否有结果数据带回,如果有,则进入步骤2-6,如果否,则返回步骤2-1;
步骤2-6,处理返回的芯片处理结果,待完成后返回步骤2-1;
步骤2-7,判断发送队列中是否有结果未接收的用户数据,如果有,则执行步骤2-8,如果没有,则执行步骤2-4;
步骤2-8,根据芯片状态线,判断芯片的COS是否有芯片处理结果数据可读,有则读取一条芯片处理结果数据,并处理返回的芯片处理结果数据,待完成后返回步骤2-1;如果超时,则进入步骤2-9;
步骤2-9,把发送队列中结果未接收的用户数据放入重试队列,并返回步骤2-1。
需要说明的是,本发明采用同步优先的机制,所谓的同步请求模式,即是指与芯片进行单次SPI通信交互过程中,发送某SN号的用户数据后,则会等待返回同SN号的芯片处理结果。即在有同步请求的情况下,则优先执行同步请求指令,在无同步请求的情况下,则执行SPI异步通信交互机制,即在与芯片进行单次SPI通信交互过程中,发送某SN号的用户数据时,如果有其它SN号的用户数据已处理完成,则会返回其它SN号的芯片处理结果。
可以理解,在没有同步请求的情况下,从发送队列取出节点用户数据,用户数据发送给芯片的COS后有带回结果则处理结果,否则继续取节点用户数据发送。当有接收结果数据时,处理接收的结果数据,结果数据正确将接收的结果数据入接收队列,结果数据出错,进行异常数据处理,异常数据处理过程中会把需要重发的用户数据放入重试队列。
具体的,取用户数据过程中队列操作会有锁保护和信号量的增减,在没有数据的情况下,会通过信号量wait进行指示发送队列为空。
具体的,所述步骤2-8中,根据芯片状态线判断芯片的COS是否有芯片处理结果数据可读时,芯片状态线的信号为预设值,则表示芯片的COS有芯片处理结果数据可读,否则表示芯片的COS没有芯片处理结果数据可读。
如图2所示,所述基于芯片的SPI单路通信方法还包括:在上述步骤2-1执行芯片数据清理过程后,进入步骤2-10;
步骤2-10,如果有同步请求,判断发送队列中是否有结果未接收的用户数据,如果有,则执行步骤2-11,如果没有,则执行步骤2-13;
步骤2-11,根据芯片状态线,判断芯片的COS是否有芯片处理结果数据可读,如果有,则执行步骤2-12,如果没有,则执行步骤2-13;
步骤2-12,由第二工作线程读取一条芯片处理结果数据并进行处理,然后返回步骤2-11进行重复读取,直至芯片的COS没有需要接收的芯片处理结果数据可读;
步骤2-13,对第二工作线程进行解锁并挂起,等待同步请求执行完成后,唤醒第二工作线程。
可以理解,如果有同步请求时,读取完所有COS中的芯片处理结果数据,通过条件变量挂起自己,当同步操作完成后,会被同步唤醒异步操作;
具体的,当有同步操作时,同步操作首先置位一个变量表示有同步请求,再尝试加锁,有异步正在处理的情况下,同步将阻塞在加锁上。异步操作发现变量被置位,表示有同步请求,则进行只读不写的流程,直到清空COS缓存数据,异步释放锁后挂起自己。此时同步加锁成功进行后续操作,操作完成后,同步释放锁并发信号唤醒异步操作。
需要说明的是,同步请求的执行过程可以由第三工作线程完成,第三工作线程复用为同步请求执行和异常用户数据处理。
如图3所示,上述步骤2-6,具体包括:
步骤2-6-1,由第二工作线程解析返回的芯片处理结果;
步骤2-6-2,检查芯片处理结果的包头是否正确,如果不正确,则结束流程,如果正确,则进入步骤2-6-3;
步骤2-6-3,检查芯片处理结果的SN是否是当前需要接收的SN,如不是,则进入步骤2-6-5,如果是,则进入步骤2-6-4;
步骤2-6-4,由第二工作线程将芯片处理结果数据放入所述接收队列,并获取芯片的COS内的空位数据,计算出当前芯片缓存数据包数;
步骤2-6-5,进行异常数据处理,检查异常处理的芯片处理结果数据是否命中需要接收的节点SN,若未命中,则结束流程,若命中,则执行步骤2-6-4。
需要说明的是,由于SPI异步通信交互机制下,发送某SN号的用户数据时,如果有其它SN号的用户数据已处理完成,则会返回其它SN号的芯片处理结果;因此,在与芯片进行单次SPI通信交互过程中,发送的用户数据的SN号,与返回的芯片处理结果的SN号不一定相同;
那么,步骤2-6-3中的当前需要接收的SN指的是所有结果未接收的用户数据的SN号中的一个,不一定是当前发送的用户数据的SN号。因此,芯片处理结果数据的SN不是当前需要接收的SN,却能命中当前未接收的芯片处理结果数据SN。
如图4所示,上述步骤2-6-5,具体包括:
步骤2-6-5-1,将异常处理的芯片处理结果数据SN和当前未接收的所有芯片处理结果数据SN进行比较;
步骤2-6-5-2,检查是否命中当前未接收的芯片处理结果数据SN,若未命中,则结束流程,若命中,则进入步骤2-6-5-3;
步骤2-6-5-3,将当前需要接收的芯片处理结果数据的SN位置与命中的芯片处理结果数据的SN位置之间所有对应的用户数据放入重试队列;
步骤2-6-5-4,由第二工作线程将命中SN的芯片处理结果数据返回至接收队列中。
可以理解,将当前需要接收的芯片处理结果数据的SN位置与命中的芯片处理结果数据的SN位置之间所有对应的用户数据放入重试队列,进行重新处理,能够避免数据错乱,提高SPI单路通信的准确率。
进一步的,预设芯片的COS缓冲区最多只能缓存N包数据,由第二工作线程监测当前发送给芯片的数据包量与芯片返回的数据包量之间的差值是否大于N-1,如果是,则启动一次主动读取芯片的COS操作。
可以理解,步骤2-6-4中计算出当前芯片缓存数据包数,是为了防止芯片的COS处理超负荷导致数据丢失;当发送数据减去接收数据多余N-1包时,将进行一次主动读COS操作。
优选的,N取值8,但不限于此。
如图5所示,上述步骤3,具体包括:
步骤3-1,由第三工作线程从所述重试队列取异常用户数据;
步骤3-2,并进行线程加锁,保证同步异步互斥,即执行第三工作线程的SPI同步通信流程的同时,停止第二工作线程的SPI异步通信流程;
步骤3-3,由第三工作线程同步发送异常用户数据给芯片,并读取芯片返回的所述异常用户数据对应的芯片处理结果;
步骤3-4,判断返回的所述异常用户数据对应的芯片处理结果是否正常,如果是,则执行步骤3-5;如果否,则返回步骤3-3进行重试,如果重试未超过M次且返回的所述异常用户数据对应的芯片处理结果正常,则执行步骤3-5,如果重试超过M次且返回的所述异常用户数据对应的芯片处理结果仍不正常,则生成异常结果并放入所述接收队列;
步骤3-5,进行线程解锁,将所述异常用户数据对应的芯片处理结果放入所述接收队列。
可以理解,异步线程(即第二工作线程)处理数据,在失败的情况下,将对应的异常用户数据存入重试队列。重试线程(即第三工作线程)的任务则是从重试队列取出异常用户数据进行同步发送并接收对应的芯片处理结果,将接收的芯片处理结果存入接收队列。在同步收发过程中,如果出现错误,进行M次重试,M次重试都出错,则将异常结果放入接收队列。
优选的,M取值可以为5,但不限于此。
图6示出了本发明一种基于芯片的SPI单路通信系统的框图。
如图6所示,本发明提出的基于芯片的SPI单路通信系统包括:应用平台和芯片,所述应用平台与所述芯片进行单路SPI通信连接;所述应用平台置入有SDK软件包,应用平台中的用户APP借助所述SDK软件包来实现调用所述芯片进行运算服务;
所述SDK软件包包括:三个队列和四个工作线程;
三个队列分别为:
发送队列:用于存放待发送的用户数据;
接收队列:用于存放芯片返回的芯片处理结果;
重试队列:用于存放需要重发的异常用户数据;
四个工作线程分别为:
第一工作线程,用于把用户数据放入发送队列;
第二工作线程,用于从所述发送队列取出对应的用户数据,并发送到芯片进行运算处理;在发送用户数据的同时,通过SPI全双工通信模式从所述芯片异步接收已完成其它用户数据的芯片处理结果,并放入接收队列;如接收到的芯片处理结果出现异常,则将异常的芯片处理结果对应的用户数据作为异常用户数据放入重试队列;
第三工作线程,用于从所述重试队列取出异常用户数据,发送到所述芯片,再从所述芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;
第四工作线程,用于从所述接收队列依次读取芯片处理结果并返回给用户APP。
进一步的,所述SDK软件包还包括发送接口和接收接口,所述SDK软件包通过发送接口和接收接口来实现与用户APP的异步通信;其中,所述发送接口对应于第一工作线程,所述接收接口对应于第四工作线程。
进一步的,所述芯片包括COS缓冲区,预设芯片的COS缓冲区最多只能缓存N包数据,由第二工作线程监测当前发送给芯片的数据包量与芯片返回的数据包量之间的差值是否大于N-1,如果是,则启动一次主动读取芯片的COS操作。
需要说明的是,所述应用平台与所述芯片之间的单路SPI通信连接采用SPI全双工机制,SPI全双工通信机制下,数据通信(发送数据和返回数据)和安全芯片(后称SE)端处理数据可以同时进行,且发送数据的同时可返回可有效数据。
如图7所示,时间段t1执行应用平台(后称主机端)组包1;
时间段t2执行主机端组包2和发送数据1 并行执行;
时间段t3执行主机端组包3、发送数据2和SE端处理数据1并行执行;
时间段t4执行主机端组包4、发送数据3并返回数据1和SE端处理数据2 并行执行;
时间段t5执行处理数据1、发送数据4并返回数据2和SE端处理数据3 并行执行。
可以理解,上述全双工通信五个步骤的流水执行。在SPI全双工机制下,对于IO通信时间(发送数据、返回数据时间)小于SE端处理时间的场景,实际耗时是SE端连续处理数据的时间,充分发挥SE端性能。对于IO通信时间(发送数据、返回数据时间)大于SE端处理时间的场景,实际耗时是连续IO通信时间,瓶颈是IO通信。
本发明提出的基于芯片的SPI单路通信方法和系统,通过异步全双工通信机制,在单次SPI通信过程中,无需考虑发送的用户数据与接收的芯片处理结果是否具有相同的SN,实现异步数据交互,从而有效提升了SPI通信效率,有利于充分发挥芯片片内运算性能,提高芯片的利用率。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种基于芯片的SPI单路通信方法,其特征在于,包括以下步骤:
步骤1,由第一工作线程将应用层的多个用户数据依次放入发送队列;
步骤2,由第二工作线程依次从所述发送队列取出对应的用户数据,并发送到芯片进行运算处理;在发送用户数据的同时,通过SPI全双工通信模式从所述芯片异步接收已完成其它用户数据的芯片处理结果,并放入接收队列;如接收到的芯片处理结果出现异常,则将异常的芯片处理结果对应的用户数据作为异常用户数据放入重试队列;
上述步骤2具体包括:
步骤2-1,加锁并检查是否有同步请求,如果否,则进入步骤2-2,如果是,则执行芯片数据清理过程;
步骤2-2,由第二工作线程判断所述发送队列是否为空,如果否,则进入步骤2-3,如果是,则进入步骤2-7;
步骤2-3,依据未接收数据包数量,判断芯片的COS是否有缓存空位,若有空位,则进入步骤2-4,若没有空位,则执行步骤2-8;
步骤2-4,由第二工作线程从所述发送队列取出用户数据,进入步骤2-5;期间如果发送队列为空,则挂起等待;
步骤2-5,将用户数据发送给芯片,同时通过SPI全双工通信模式接收芯片返回的已完成其它用户数据的芯片处理结果,判断是否有结果数据带回,如果有,则进入步骤2-6,如果否,则返回步骤2-1;
步骤2-6,处理返回的芯片处理结果,待完成后返回步骤2-1;
步骤2-7,判断发送队列中是否有结果未接收的用户数据,如果有,则执行步骤2-8,如果没有,则执行步骤2-4;
步骤2-8,根据芯片状态线,判断芯片的COS是否有芯片处理结果数据可读,有则读取一条芯片处理结果数据,并处理返回的芯片处理结果,待完成后返回步骤2-1;如果超时,则进入步骤2-9;
步骤2-9,把发送队列中结果未接收的用户数据放入重试队列,并返回步骤2-1;
步骤3,由第三工作线程从所述重试队列取出异常用户数据,发送到所述芯片,再从所述芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;
上述步骤3,具体包括:
步骤3-1,由第三工作线程从所述重试队列取异常用户数据;
步骤3-2,并进行线程加锁,保证同步异步互斥,即执行第三工作线程的SPI同步通信流程的同时,停止第二工作线程的SPI异步通信流程;
步骤3-3,由第三工作线程同步发送异常用户数据给芯片,并读取芯片返回的所述异常用户数据对应的芯片处理结果;
步骤3-4,判断返回的所述异常用户数据对应的芯片处理结果是否正常,如果是,则执行步骤3-5;如果否,则返回步骤3-3进行重试,如果重试未超过M次且返回的所述异常用户数据对应的芯片处理结果正常,则执行步骤3-5,如果重试超过M次且返回的所述异常用户数据对应的芯片处理结果仍不正常,则生成异常结果并放入所述接收队列;
步骤3-5,进行线程解锁,将所述异常用户数据对应的芯片处理结果放入所述接收队列;
步骤4,由第四工作线程从所述接收队列依次读取芯片处理结果并返回给用户APP。
2.根据权利要求1所述的基于芯片的SPI单路通信方法,其特征在于,所述方法还包括:在上述步骤2-1执行芯片数据清理过程后,进入步骤2-10;
步骤2-10,如果有同步请求,判断发送队列中是否有结果未接收的用户数据,如果有,则执行步骤2-11,如果没有,则执行步骤2-13;
步骤2-11,根据芯片状态线,判断芯片的COS是否有芯片处理结果数据可读,如果有,则执行步骤2-12,如果没有,则执行步骤2-13;
步骤2-12,由第二工作线程读取一条芯片处理结果数据并进行处理,然后返回步骤2-11进行重复读取,直至芯片的COS没有需要接收的芯片处理结果数据可读;
步骤2-13,对第二工作线程进行解锁并挂起,等待同步请求执行完成后,唤醒第二工作线程。
3.根据权利要求1所述的基于芯片的SPI单路通信方法,其特征在于,上述步骤2-6,具体包括:
步骤2-6-1,由第二工作线程解析返回的芯片处理结果;
步骤2-6-2,检查芯片处理结果的包头是否正确,如果不正确,则结束流程,如果正确,则进入步骤2-6-3;
步骤2-6-3,检查芯片处理结果的SN是否是当前需要接收的SN,如不是,则进入步骤2-6-5,如果是,则进入步骤2-6-4;
步骤2-6-4,由第二工作线程将芯片处理结果数据放入所述接收队列,并获取芯片的COS内的空位数据,计算出当前芯片缓存数据包数;
步骤2-6-5,进行异常数据处理,检查异常处理的芯片处理结果数据是否命中需要接收的节点SN,若未命中,则结束流程,若命中,则执行步骤2-6-4。
4.根据权利要求3所述的基于芯片的SPI单路通信方法,其特征在于,上述步骤2-6-5,具体包括:
步骤2-6-5-1,将异常处理的芯片处理结果数据SN和当前未接收的所有芯片处理结果数据SN进行比较;
步骤2-6-5-2,检查是否命中当前未接收的芯片处理结果数据SN,若未命中,则结束流程,若命中,则进入步骤2-6-5-3;
步骤2-6-5-3,将当前需要接收的芯片处理结果数据的SN位置与命中的芯片处理结果数据的SN位置之间所有对应的用户数据放入重试队列;
步骤2-6-5-4,由第二工作线程将命中SN的芯片处理结果数据返回至接收队列中。
5.根据权利要求1所述的基于芯片的SPI单路通信方法,其特征在于,预设芯片的COS缓冲区最多只能缓存N包数据,由第二工作线程监测当前发送给芯片的数据包量与芯片返回的数据包量之间的差值是否大于N-1,如果是,则启动一次主动读取芯片的COS操作。
6.一种基于芯片的SPI单路通信系统,其特征在于,包括:应用平台和芯片,所述应用平台与所述芯片进行单路SPI通信连接;所述应用平台置入有SDK软件包,应用平台中的用户APP借助所述SDK软件包来实现调用所述芯片进行运算服务;
所述SDK软件包包括:三个队列和四个工作线程;
三个队列分别为:
发送队列:用于存放待发送的用户数据;
接收队列:用于存放芯片返回的芯片处理结果;
重试队列:用于存放需要重发的异常用户数据;
四个工作线程分别为:
第一工作线程,用于把用户数据放入发送队列;
第二工作线程,用于从所述发送队列取出对应的用户数据,并发送到芯片进行运算处理;在发送用户数据的同时,通过SPI全双工通信模式从所述芯片异步接收已完成其它用户数据的芯片处理结果,并放入接收队列;如接收到的芯片处理结果出现异常,则将异常的芯片处理结果对应的用户数据作为异常用户数据放入重试队列;具体包括:
步骤2-1,加锁并检查是否有同步请求,如果否,则进入步骤2-2,如果是,则执行芯片数据清理过程;
步骤2-2,由第二工作线程判断所述发送队列是否为空,如果否,则进入步骤2-3,如果是,则进入步骤2-7;
步骤2-3,依据未接收数据包数量,判断芯片的COS是否有缓存空位,若有空位,则进入步骤2-4,若没有空位,则执行步骤2-8;
步骤2-4,由第二工作线程从所述发送队列取出用户数据,进入步骤2-5;期间如果发送队列为空,则挂起等待;
步骤2-5,将用户数据发送给芯片,同时通过SPI全双工通信模式接收芯片返回的已完成其它用户数据的芯片处理结果,判断是否有结果数据带回,如果有,则进入步骤2-6,如果否,则返回步骤2-1;
步骤2-6,处理返回的芯片处理结果,待完成后返回步骤2-1;
步骤2-7,判断发送队列中是否有结果未接收的用户数据,如果有,则执行步骤2-8,如果没有,则执行步骤2-4;
步骤2-8,根据芯片状态线,判断芯片的COS是否有芯片处理结果数据可读,有则读取一条芯片处理结果数据,并处理返回的芯片处理结果,待完成后返回步骤2-1;如果超时,则进入步骤2-9;
步骤2-9,把发送队列中结果未接收的用户数据放入重试队列,并返回步骤2-1;
第三工作线程,用于从所述重试队列取出异常用户数据,发送到所述芯片,再从所述芯片同步读取异常用户数据对应的芯片处理结果,将芯片处理结果存入接收队列;具体包括:
步骤3-1,由第三工作线程从所述重试队列取异常用户数据;
步骤3-2,并进行线程加锁,保证同步异步互斥,即执行第三工作线程的SPI同步通信流程的同时,停止第二工作线程的SPI异步通信流程;
步骤3-3,由第三工作线程同步发送异常用户数据给芯片,并读取芯片返回的所述异常用户数据对应的芯片处理结果;
步骤3-4,判断返回的所述异常用户数据对应的芯片处理结果是否正常,如果是,则执行步骤3-5;如果否,则返回步骤3-3进行重试,如果重试未超过M次且返回的所述异常用户数据对应的芯片处理结果正常,则执行步骤3-5,如果重试超过M次且返回的所述异常用户数据对应的芯片处理结果仍不正常,则生成异常结果并放入所述接收队列;
步骤3-5,进行线程解锁,将所述异常用户数据对应的芯片处理结果放入所述接收队列;
第四工作线程,用于从所述接收队列依次读取芯片处理结果并返回给用户APP。
7.根据权利要求6所述的基于芯片的SPI单路通信系统,其特征在于,所述SDK软件包还包括发送接口和接收接口,所述SDK软件包通过发送接口和接收接口来实现与用户APP的异步通信;其中,所述发送接口对应于第一工作线程,所述接收接口对应于第四工作线程。
8.根据权利要求6所述的基于芯片的SPI单路通信系统,其特征在于,所述芯片包括COS缓冲区,预设芯片的COS缓冲区最多只能缓存N包数据,由第二工作线程监测当前发送给芯片的数据包量与芯片返回的数据包量之间的差值是否大于N-1,如果是,则启动一次主动读取芯片的COS操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111548764.0A CN114356826B (zh) | 2021-12-17 | 2021-12-17 | 一种基于芯片的spi单路通信方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111548764.0A CN114356826B (zh) | 2021-12-17 | 2021-12-17 | 一种基于芯片的spi单路通信方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114356826A CN114356826A (zh) | 2022-04-15 |
CN114356826B true CN114356826B (zh) | 2024-02-09 |
Family
ID=81098437
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111548764.0A Active CN114356826B (zh) | 2021-12-17 | 2021-12-17 | 一种基于芯片的spi单路通信方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356826B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6941379B1 (en) * | 2000-05-23 | 2005-09-06 | International Business Machines Corporation | Congestion avoidance for threads in servers |
KR20150039142A (ko) * | 2015-02-16 | 2015-04-09 | 주식회사 이노와이어리스 | 시스템 성능 향상을 위한 제어 로직을 구비한 직렬 주변기기 인터페이스 및 그 구동 방법 |
CN110297800A (zh) * | 2019-06-29 | 2019-10-01 | 飞天诚信科技股份有限公司 | 一种主控芯片与安全芯片之间稳定通信的实现方法及系统 |
CN111130710A (zh) * | 2019-12-10 | 2020-05-08 | 常州新途软件有限公司 | 一种基于spi的双工通信方法 |
CN113641614A (zh) * | 2021-07-07 | 2021-11-12 | 北京智芯微电子科技有限公司 | 基于spi的单通道多业务并行处理方法及芯片 |
-
2021
- 2021-12-17 CN CN202111548764.0A patent/CN114356826B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6941379B1 (en) * | 2000-05-23 | 2005-09-06 | International Business Machines Corporation | Congestion avoidance for threads in servers |
KR20150039142A (ko) * | 2015-02-16 | 2015-04-09 | 주식회사 이노와이어리스 | 시스템 성능 향상을 위한 제어 로직을 구비한 직렬 주변기기 인터페이스 및 그 구동 방법 |
CN110297800A (zh) * | 2019-06-29 | 2019-10-01 | 飞天诚信科技股份有限公司 | 一种主控芯片与安全芯片之间稳定通信的实现方法及系统 |
CN111130710A (zh) * | 2019-12-10 | 2020-05-08 | 常州新途软件有限公司 | 一种基于spi的双工通信方法 |
CN113641614A (zh) * | 2021-07-07 | 2021-11-12 | 北京智芯微电子科技有限公司 | 基于spi的单通道多业务并行处理方法及芯片 |
Non-Patent Citations (1)
Title |
---|
一种嵌入式处理器间SPI总线通信优化方法;白林亭;海钰琳;李亚晖;;航空计算技术(06);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114356826A (zh) | 2022-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0272834B1 (en) | Inter-processor communication protocol | |
EP2701074B1 (en) | Method, device, and system for performing scheduling in multi-processor core system | |
EP2176773B1 (en) | Data packet processing method for a multi core processor | |
EP2645674B1 (en) | Interrupt management | |
US7886089B2 (en) | Method, system and computer program product for enhanced shared store buffer management scheme for differing buffer sizes with limited resources for optimized performance | |
US20130054858A1 (en) | Method and system for conditional interrupts | |
US20100332908A1 (en) | Performing Remote Loads and Stores over Networks | |
JP6129976B2 (ja) | 高効率アトミック演算を使用した方法および装置 | |
CN101447931B (zh) | 一种排他操作的实现方法和装置 | |
CN114356826B (zh) | 一种基于芯片的spi单路通信方法和系统 | |
JP2000083053A (ja) | プログラム内蔵方式パケット処理装置 | |
EP2336897B1 (en) | Data processing apparatus, data processing method, and computer-readable storage medium | |
JP2012243162A (ja) | 情報処理装置、通信方法、及びプログラム | |
JPWO2008120566A1 (ja) | エンジン・プロセッサ連携システム、及び連携方法 | |
WO2020211214A1 (zh) | 用于Linux操作系统的故障诊断方法及系统 | |
JP2002024195A (ja) | 並列処理装置、及び、並列処理方法 | |
US8782161B2 (en) | Method and system for offloading computation flexibly to a communication adapter | |
US20060248531A1 (en) | Information processing device, information processing method and computer-readable medium having information processing program | |
JP5262418B2 (ja) | タスクスケジューリング装置およびタスクスケジューリング方法 | |
CN115712493A (zh) | 请求处理方法、设备及系统 | |
CN115840621A (zh) | 一种多核系统的交互方法及相关装置 | |
US20080271024A1 (en) | Information processing apparatus, information processing system and information processing method for processing tasks in parallel | |
US9948533B2 (en) | Interrupt management | |
CN105721342A (zh) | 多进程设备的网络连接方法和系统 | |
CN114356825B (zh) | 一种基于芯片的spi双路通信方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |