【NVME系列-PRP与PRP list】



前言

NVMe协议是嵌入式存储控制器领域广为应用的协议之一,这个系列将会一步步剖析NVMe协议,本篇讲解 prp与prp list. 先搭框架预告,内容晚上或者周末会补充。

感兴趣的伙伴可以在我下方留言,我会从评论的问题选择性的给予回答,放在文章中。

预告下篇:【NVMe系列-SQ,CQ,DB与主机和 nvme controller的关系】
预告更多:NVMe-TCG Opal相关。敬请期待。文末有我的联系方式。


更换成自己需要的图,有些网站是可以免费下载图片,不涉及侵权

1、PRP 与 prp list是什么?

在介绍PRP 之前,我们需要先引入一个概念Memory page size(MPS),也就是主机内存页的大小,这个size可以是4k,16k,由主机设备决定,我们不过多发散。只需要知道,这是 1个内存页可存的最大数据量,即可。

PRP: 就是记录主机物理内存地址的一个64 bit的数据。他的数据格式:
bit_63:bit_n+1 , host memory address;
bit_n:bit2, 在上面的主机地址开始的偏移量offset;
bit1:bit0, 00表示使用的数据传输格式是 PRP

主机下发的cmd有两个PRP(PRP1和PRP2),到这里有意思的情况就来了,只有两个描述 MPS的 prp,最多能处理多少数据呢?往下看。

2、prp 与 prp list应用的四种情况

这里就涉及到初中数学经常提到的分情况处理:
(1)当 0 < data_len < MPS-offset
此时只需要1个PRP1 就可以。
(2)当 MPS-offset < data_len < MPS-offset(即PRP1最大储存的数据量)+ MPS(即PRP2最大存储的数据量)
此时需要PRP1和PRP2.
(3)当 MPS-offset(即PRP1最大储存的数据量)+ MPS(即PRP2最大存储的数据量) < data_len
那么此时,PRP2就可以是一个 PRP List,也就是说,PRP2存的是PRP的地址。(这里可能有点绕,仔细理解下)。即PRP2储存的不是数据了,而是主机memory的地址,即多个PRP,根据这些地址,我们再去拿数据。为了保证硬件处理的效率,PRP list中的每个PRP的offset都是0.
(4)那如果数据长度,超过了PRP list能描述的最大数据长度(是多少呢,聪明的你来算一下放在评论区),那么PRP2描述的,就是PRP List的list(这里更绕了,好好理解下)。
以上呢,就是PRP 相关的核心概念了。

3、总结

(1)PRP 记录的是主机的物理内存地址,它是主机和设备交换数据的媒介。
(2)当主机有数据要发送时,会先把数据放在这个地址(PRP1,PRP2),然后再把地址告诉device,让device来取.
(3)当主机有数据要接收时,会先把把地址告诉device,让device把数据搬到这个地址,然后主机再来把数据拿走。
(4)在数据传输的过程中,PRP1 和 PRP2 结合MPS,会存在不同的情况,需要根据data length进行区分。
你,学会了吗?

本系列回顾清单

to be add


我是Eric xuan, 一名小厂固件工程师

如果你对我的博客感兴趣,或者有什么想了解的问题
欢迎评论、点赞 和 转发,私信我。
E-mail: 1171213808@qq.com


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值