【技术实现步骤摘要】
一种基于ring通信机制的数据交互方法和系统
[0001]本专利技术涉及计算机领域,尤其涉及一种基于ring通信机制的数据交互方法和系统。
技术介绍
[0002]DMA:(DirectMemoryAccess,直接存储器访问)PCI
‑
E密码卡数据通信使用的通信方法,用于主机内存和密码卡之间数据搬运。
[0003]RING:密码卡用于管理主机端DMA内存的环形队列。
[0004]密码卡使用DMA和主机进行数据高速传输,密码卡使用链式DMA方式进行数据传输,并采用环形队列(以下简称“RING”)机制动态管理主机端DMA内存,密码卡内部设置了128个DMA环形队列管理器(以下简称“ring通道”),每个DMA的工作原理相同。单个RING机制工作原理见图1和图2所示。
[0005]密码卡的每个RING通道有两组寄存器,分别来管理主机端的发送队列缓冲区和接收队列缓冲区。发送队列缓冲区存放的是请求包(req),接收队列缓冲区存放的是响应包(resp)。发送队列缓冲区和接收队列缓冲区由主机来申请,主机通过BAR(BaseAddressRegister)空间把发送队列缓冲区的首地址写入到密码卡上发送控制器的tx_base_addr_reg寄存器,把接收队列缓冲区的首地址写入到密码卡接收控制器的rx_base_addr_reg寄存器。密码卡上tail和head寄存器用来保存发送队列缓冲区和接收队列缓冲区中待处理数据相对于基地址的偏移量,tx_tail_reg、tx_head_reg寄存器用于 ...
【技术保护点】
【技术特征摘要】
1.一种基于ring通信机制的数据交互方法,其特征在于,包括以下步骤:由主机端预先定义发送头变量tx_head_value、发送尾变量tx_tail_value和接收头变量rx_head_value,发送头变量tx_head_value用来记录密码卡上tx_head_reg寄存器的值,发送尾变量tx_tail_value用来记录密码卡上tx_tail_reg寄存器的值,接收头变量rx_head_value用来记录密码卡上rx_head_reg寄存器的值,在接收队列缓冲区初始化时,主机端把接收队列内存值设定为预设值RSP_RESP_INIT_CODE;在主机端向密码卡发送数据时:主机端分别读取发送头变量tx_head_value和发送尾变量tx_tail_value的值,计算出发送尾变量tx_tail_value和发送头变量tx_head_value的差值,对该差值和MAX_REQ_SIZE取模,并判断取模结果是否达到第一预设值, 如果否,则构造请求包req并把请求包req放入发送队列的发送尾变量 tx_tail_value指向的位置;其中,mod表示取模操作,所述第一预设值为MAX_REQ_SIZE
‑
1,MAX_REQ_SIZE为发送队列缓冲区最大值;在主机端向密码卡发送数据后:主机端更新发送尾变量tx_tail_value,并使更新后的发送尾变量tx_tail_value等于更新前的tx_tail_value+req_size,其中,req_size表示单个请求包req的大小;主机端判断更新后的发送尾变量tx_tail_value 是否大于预设值MAX_REQ_SIZE,如果是,则将发送尾变量tx_tail_value置为0,并将发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器,如果否,则直接将更新后的发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器;在主机端接收来自密码卡的数据时:主机端读取接收头变量rx_head_value的值,并将接收头变量rx_head_value在接收队列指向位置的内存值记做resp_value;主机端判断resp_value 是否等于预设值 RSP_RESP_INIT_CODE,如果是,则继续读取接收头变量rx_head_value的值,如果否,则更新接收头变量rx_head_value,并使更新后的接收头变量rx_head_value等于更新前的rx_head_value+resp_size;其中,resp_size表示单个响应包resp的大小;主机端判断更新后的接收头变量rx_head_value是否大于预设值MAX_RESP_SIZE,如果是,则将接收头变量rx_head_value置为0,并把接收头变量rx_head_value的值写入到密码卡的rx_head_reg寄存器中,如果否,则将更新后的接收头变量rx_head_value的值写入到密码卡的rx_head_reg寄存器中;其中预设值MAX_RESP_SIZE为接收队列缓冲区最大值。2.根据权利要求1所述的基于ring通信机制的数据交互方法,其特征在于,在将发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器,或者将更新后的发送尾变量tx_tail_value的值写入到密码卡上tx_tail_reg寄存器后,所述方法还包括以下步骤:在密码卡检测到tx_tail_reg寄存器更新后,根据tx_tail_reg和tx_head_reg差值的绝对值计算需要搬运请求包req的大小,启动DMA搬运请求包req报文和待运算数据,并更新tx_head_reg寄存器的值为tx_head_reg+req_size,待搬运完成后,使得tx_head_reg =tx_tail_reg。3.根据权利要求2所述的基于ring通信机制的数据交互方法,其特征在于,在更新tx_head_reg寄存器的值为tx_head_reg+req_size之后,所述方法还包括以下步骤:
由密码卡对请求包req和待运算数据进行处理,获得响应包resp,并启动DMA搬运响应包resp至rx_tail_reg指向的主机接收缓冲区位置,并更新rx_tail_reg寄存器的值为更新前的rx_tail_reg+resp_size。4.根据权利要求1所述的基于ring通信机制的数据交互方法,其特征在于,在将接收头变量rx_head_value的值写入到密码卡的rx_head_reg寄存器中之后,所述方法还包括以下步骤:主机端更新发送头变量tx_head_value ,并使得更新后的发送头变量tx_head_value等于更新前的发送头变量tx_head_value+ req_size;主机端判断更新后的发送头变量tx_head_value是否大于MAX_REQ_SIZE;如果是,则将发送头变量tx_head_value置为0...
【专利技术属性】
技术研发人员:雷宗华,彭金辉,廖正赟,孙晓鹏,
申请(专利权)人:郑州信大捷安信息技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。