手撕M.2 的B-KEY M-KEY、M+B KEY定义

SSD 尺寸与规格
我们在买ssd的时候,商家都会说什么ssd是2280还是2242规格的,这里的规格实际上就是代表的ssd的尺寸大小
M.2模组的尺寸目前有11种,用Type xxyy的方式表示,xx表示宽度,yy表示长度,单位为毫米。例如上面提到的Type 2230则表示其宽度22nm,长度30nm;Type 2242,表示其宽度22mm,长度42mm;Type 2280则表示其宽度22nm,长度80nm。目前M.2 SSD常见的Type有三种,就是2230、2242、2280。
在这里插入图片描述
按照接口类型分,可以把m.2接口分为Socket 1、 Socket 2和Socket 3

Socket 1也可以叫做B key E,支持 sdio, pcie x2

Socket 2也可以叫做B key,支持sata,pcie x2

Socket 3也可以叫做M key,支持sata,pcie x4

其中E KEY比较少见,缺口在偏中间位置
在这里插入图片描述
下图为PIN定义
在这里插入图片描述
B KEY 和M KEY较为常见
在这里插入图片描述
B key 的防呆键位于插槽的左方,
M key 则在右方。

两种类型的插槽其短边接脚数量有所差异:
在这里插入图片描述
一开始,B key的只能插在b key(Socket 2)的接口中,
m key的只能插在m key(Socket 3)的接口中,
但是随着m key接口的普及,越来越多电脑主板只有m key 接口,b key的ssd根本插不上去,
于是厂商们又设计了一个b&m key接口的ssd。
值得注意的是,ssd的金手指有b key,m key ,b&m key三种,但是主板上的m.2接口只有b key和m key两种。

当主板上的m2接口是b key时,只能够插上b&m key和b key的ssd,m key的插不上去,如下图:
在这里插入图片描述当主板上的m2接口是m key时,只能够插上b&m key和m key的ssd,b key的插不上去,如下图:
在这里插入图片描述
SSD协议
按照协议分,可以把m.2 ssd分为走sata通道的ssd和走pcie通道的ssd。注意这里只讨论m.2接口的ssd,ssd即使是m2接口的,也分走sata通道和pcie通道的。
首先我们要知道nvme和ahci是协议:
nvme协议是专门为pcie通道的固态硬盘设计的,
关于nvme协议:可以参考下述链接:
https://www.sysgeek.cn/what-is-nvme/
https://zh.wikipedia.org/wiki/NVM_Express

而achi是专门为sata通道的硬盘设计的,现在越来越多人,把achi协议就叫成sata协议,我们下面就用sata协议这个名称。
走sata的速度跟传统sata接口的没区别,就是接口变成了m2的了。
走pcie的就是我们说的nvme ,性能比sata强了很多。

根据我们上面对m2接口型号的了解,我们知道

B key 支持sata,pcie x2.

M key 支持sata, pcie x4.

b&m key只支持sata,pcie x2.
展示海康的b+m key的SSD的PIN定义
在这里插入图片描述
在这里插入图片描述
从这两张图可知:
为了兼容B+m KEY,这个SSD的金手指从PIN1-PIN75
在B KEY处删减了PIN12-PIN19,共计8个PIN
在M KEY处删减了PIN59-PIN66共计8个PIN

也就注定不能保留完整PCIE x4的M KEY,因此b&m key只支持sata,pcie x2.,因此
这里直接给出结论,在市面上你能买到的ssd中,绝大多数b&m key的ssd都是不支持nvme协议的,因为只有pcie x2.只支持sata协议,所有m key的ssd都支持nvme协议,而典型的 NVMe SSD 使用四条 PCI Express 通道。
下图附上A KEY、 E KEY 、M KEY、B KEY的PIN截图
在这里插入图片描述

在这里插入图片描述

这里放一张图,比对一下SATA3.0和PCIE 3.0的带宽区别
在这里插入图片描述
在这里插入图片描述
PCIE3.0 X4 和SATA3.0速率相差接近7倍!

引用:https://blog.csdn.net/weixin_42229404/article/details/84070670
M KEY B KEY定义: https://upload.csdn.net/creation/uploadResources/89677679

任务描述 本关任务:使用 HashMap 集合操作菜单。 相关知识 什么是 HashMap HashMap 是 Map 接口的实现类,它存储的内容是键值对(key-value)映射,其中 key、value 都可以为 null。HashMap 是无序的,即被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。 创建 HashMap 集合 使用以下代码即可创建一个 HashMap 集合。 public static void main(String[] args) { // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型 Map<String, Integer> hashMap = new HashMap<>(); } HashMap 集合常用方法 下表展示了 HashMap 集合的常用方法: 方法名 方法说明 put()方法 往集合中添加元素,key 值不可重复,重复时会覆盖之前的 value 值 size()方法 返回集合长度 get(key)方法 获取对应 key 值的 value 值 clear()方法 清除集合中的所有元素 values()方法 返回一个新集合,获取集合中所有元素的 values keySet()方法 返回一个新集合,获取集合中所有元素的 key remove()方法 根据 key 或者 key-value 去除集合中元素,并分别返回 value 值 Boolean 值 iterator()方法 返回一个迭代器对象 entrySet()方法 将 Map 集合每个 key-value 转换为一个 Entry 对象,并返回由所有的 Entry 对象组成的 Set 集合 containsKey() 判断集合中是否含右指定的 key 值 常用方法示例: public static void main(String[] args) { // 创建 HashMap 集合,key存储字符串类型,value存储整数类型 Map<String, Integer> hashMap = new HashMap<>(); // 添加元素 hashMap.put("李四",28); hashMap.put("张三",26); hashMap.put("王五",26); // 根据 key 获取 value 值 Integer zs = hashMap.get("张三"); System.out.println(zs); // 获取所有 key 值 Set<String> strings = hashMap.keySet(); System.out.println(strings); // 获取所有 value 值 Collection<Integer> values = hashMap.values(); System.out.println(values); // 根据 key 去除元素 Integer ww = hashMap.remove("王五"); System.out.println(ww); // 根据 key-value 去除元素 boolean boole = hashMap.remove("李四", 28); System.out.println(boole); System.out.print(hashMap); } 执行结果: 26 [李四, 张三, 王五] [28, 26, 26] 26 true {张三=26} 遍历 HashMap 集合 以下是三种常用遍历方法。 public static void main(String[] args) { // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型 Map<String, Integer> map = new HashMap<>(); // 添加元素 map.put("李四",28); map.put("张三",26); map.put("王五",26); //第一种:通过 keySet 遍历,普遍使用 for (String key : map.keySet()) { System.out.println("key= "+ key + " and value= " + map.get(key)); System.out.println(----------); } //第二种:通过 entrySet 迭代器遍历 Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, Integer> entry = it.next(); System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); System.out.println(----------); } //第三种:通过 entrySet 增强 for 循环遍历,推荐,尤其是容量大时 for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); System.out.println(----------); } } 执行结果: key= 李四 and value= 28 key= 张三 and value= 26 key= 王五 and value= 26 ---------- key= 李四 and value= 28 key= 张三 and value= 26 key= 王五 and value= 26 ---------- key= 李四 and value= 28 key= 张三 and value= 26 key= 王五 and value= 26 编程要求 仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,使用 HashMap 集合的常用方法完成所给要求,具体如下: 接收给定的一行字符串(如:红烧鱼:50,小炒牛肉:75,...); 切割字符串,把切割后的元素添加进 HashMap 集合中; 往集合中添加一道菜,菜名:lamb,价格:50; 输出所有菜名(不含价格); 删除红烧鱼小炒牛肉这两道菜后输出集合长度; 打印集合。 注意:字符串中的逗号分号都是中文符号。 测试说明 平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 例: 测试输入: 粉蒸肉:50,红烧鱼:50,小炒牛肉:75,包菜:20,蒜蓉虾:100 预期输出: [包菜, 蒜蓉虾, lamb, 小炒牛肉, 粉蒸肉, 红烧鱼] 4 {包菜=20, 蒜蓉虾=100, lamb=50, 粉蒸肉=50}
10-10
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值