[发明专利]基于多块USB接口芯片提高与上位机通讯速率的方法在审
申请号: | 201910369736.9 | 申请日: | 2019-05-06 |
公开(公告)号: | CN110147338A | 公开(公告)日: | 2019-08-20 |
发明(设计)人: | 张治国;赖小松;王艺璇;施博文 | 申请(专利权)人: | 电子科技大学 |
主分类号: | G06F13/38 | 分类号: | G06F13/38 |
代理公司: | 成都立信专利事务所有限公司 51100 | 代理人: | 冯忠亮 |
地址: | 610054 四川省成*** | 国省代码: | 四川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 上位机 上位机通讯 多块 数据输入模块 匹配问题 多线程 下位机 并发 数据处理程序 并口数据 并行传输 程序解析 输入模块 传输 并口 | ||
1.基于多块USB接口芯片提高与上位机通讯速率的方法,其特征在于,包括并口数据输入模块、多块USB接口芯片、上位机多线程数据处理程序,FPGA控制模块,其中并口数据输入模块采取16线或8线并口作为输入接口,多块USB接口芯片传输速率总和大于并口数据输入模块的传输速率,FPGA控制模块通过并口连接于并口数据输入模块,通过SPI通讯协议连接于各块USB接口芯片,各块USB接口芯片通过USB协议连接于上位机,FPGA控制模块共有(N+1)个并行子程序,FPGA控制模块内部创建N个缓冲区用于保存并口数据输入模块里面的数据,每个缓冲区的大小为64个字节,FPGA控制模块第一个并行子程序为读取子程序,其功能是将并口数据输入模块里面的数据按字节大小依次写入N个缓冲区,每个缓冲区对应一块USB接口芯片,然后其余N个并行子程序为传输子程序,其功能是通过SPI协议驱动各个USB接口芯片将每块缓冲区的数据传输至上位机,在上位机创建N+1个线程安全队列:queue,queue1……queueN,上位机创建N+1个子线程,其中前N个子线程用于接收N块USB接口芯片传上来的数据,并将数据依次存入queue1到queueN线程安全队列里,第N+1个子线程将queue1,queue2……queueN线程安全队列的数据依次取出放入queue线程安全队列里,合成并口数据输入模块的原始数据,即把queue1里面的数据弹出一帧数据放入queue线程安全队列,然后把queue2里面的数据弹出一帧数据放入queue线程安全队列,直到把第N个queueN线程安全队列里面的数据弹出一帧数据放入queue线程安全队列,然后重复以上步骤,queue线程安全队列里面的数据便是原始数据信号,供数字信号处理。
2.根据权利要求1所述的基于多块USB接口芯片提高与上位机通讯速率的方法,其特征在于, FPGA的工作流程如下:
(a)FPGA创建N个数据帧为64个字节的缓冲区:buffer1、buffer2……bufferN,N为缓冲区的编号,
(b)创建N个与缓冲区相对应的状态变量标志Full1、Full2……FullN,其中FullN为0代表缓冲区N未满,FullN为1代表缓冲区N为满,
(c)创建代表缓冲区对应USB接口芯片状态变量Flag,Flag取值为1到N,flag=k代表往第k块USB接口芯片写入并口数据输入模块的数据,
(d)FPGA读取并行子程序用于依次将并口数据输入模块的数据写入FPGA的N块缓冲区,其逻辑流程分别为如下所示:
S1:初始化buffer1=0……buffer2=0,Flag=1,Full1……FullN=0,
S2:读取Flag值,
S3:FPGA检测Flag是否大于零,若是执行S4,否则执行S7,
S4:FPGA检测Flag是否等于1,若是执行S5,否则执行S6 ,
S5:FPGA将FullN置零,执行S7,
S6:FPGA将Full[Flag-1]置零,
S7:FPGA读取并口输入数据写入Flag值对应的缓冲区Buffer[Flag],
S8:FPGA将Full[Flag]置1,
S9:FPGA将Flag标志值加1,
S10:FPGA检测Flag是否等于N+1,若是执行S11,否者执行S2,
S11: FPGA将Flag置1,执行S2,
(e)其余N个FPGA传输子程序逻辑流程一致,只是N的取值不同,其逻辑流程为:
S1:初始化N块USB接口芯片,
S2:读取N块USB接口芯片的FullN标志,
S3:FPGA检测FullN标志是否为1,若是执行S4,否则执行S2,
S4:驱动第N块USB接口芯片把bufferN的数据传入上位机,执行S2,
上位机的程序流程为:
(a)通过上位机建立的多线程并发数据处理程序:
包括主线程,用于初始化各外设,界面配置,以及开启N个数据接收线程来处理并口数据输入模块数据的接收,包括buffer1数据接收线程……bufferN数据接收线程,以及N个用于保存FPGA控制模块数据的线程安全队列queue1……queueN,数据解析线程,以及用以存放合成数据的线程安全队列缓冲区queue,
(b)主线程的逻辑流程为:
S1:初始化界面配置,初始化USB接口芯片,
S2:开启buffer1……bufferN数据接收线程,
S3:开启数据解析线程,
(c)N个数据接收线程的逻辑流程是一致的,只是对应N值不同,其逻辑流程为:
S1:调用USB接口芯片官方提供的DLL函数库里面的读取函数,
S2:判断是否成功读取bufferN中的数据,若读取失败表示暂时无数据传送到上位机,执行S1,否则执行S3,
S3: 将该帧数据写入queueN,
S4:是否结束线程,若是结束,否则执行S1,
(d)数据解析线程的逻辑流程为:
S1:读取queue1……queueN中各帧的大小,
S2: 检测queue1……queueN的数据大小是否都大于100帧,若否执行S1,若是执行S3,
S3: 依次从queue1……queueN中取出100帧数据,放入queue,
4: 是否结束线程,若是直接结束,否则执行步骤S1。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于电子科技大学,未经电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910369736.9/1.html,转载请声明来源钻瓜专利网。