完成实验2报告

This commit is contained in:
Jingfan Ke 2024-06-09 15:46:01 +08:00
parent cb88186ef1
commit 61329f8fe9
9 changed files with 174 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View File

@ -7,10 +7,9 @@
<div><span style="display: inline-block; width: 65px; text-align: center;">姓名</span><span style="display: inline-block; width: 25px;">:</span><span style="display: inline-block; width: 210px; font-weight: bold; text-align: left;">柯劲帆</span></div>
<div><span style="display: inline-block; width: 65px; text-align: center;">班级</span><span style="display: inline-block; width: 25px;">:</span><span style="display: inline-block; width: 210px; font-weight: bold; text-align: left;">物联网2101班</span></div>
<div><span style="display: inline-block; width: 65px; text-align: center;">指导老师</span><span style="display: inline-block; width: 25px;">:</span><span style="display: inline-block; width: 210px; font-weight: bold; text-align: left;">赵帅锋</span></div>
<div><span style="display: inline-block; width: 65px; text-align: center;">日期</span><span style="display: inline-block; width: 25px;">:</span><span style="display: inline-block; width: 210px; font-weight: bold; text-align: left;">2024年6月8</span></div>
<div><span style="display: inline-block; width: 65px; text-align: center;">日期</span><span style="display: inline-block; width: 25px;">:</span><span style="display: inline-block; width: 210px; font-weight: bold; text-align: left;">2024年6月9</span></div>
</div>
---
[TOC]
@ -60,7 +59,7 @@ UID 的标准长度为 4 字节、7 字节或 10 字节,分别对应于单级
| 行为方 | 发送内容 | | | | |
| :----: | ---------- | ---- | ---- | ---- | ---- |
| PCD | SEL = '93' | | | | |
| PICC | CT | uid0 | uid1 | uid2 | BCC |
| PICC | CT = '88' | uid0 | uid1 | uid2 | BCC |
| PCD | SEL = '95' | | | | |
| PICC | uid3 | uid4 | uid5 | uid6 | BCC |
@ -69,9 +68,9 @@ UID 的标准长度为 4 字节、7 字节或 10 字节,分别对应于单级
| 行为方 | 发送内容 | | | | |
| :----: | ---------- | ---- | ---- | ---- | ---- |
| PCD | SEL = '93' | | | | |
| PICC | CT | uid0 | uid1 | uid2 | BCC |
| PICC | CT = '88' | uid0 | uid1 | uid2 | BCC |
| PCD | SEL = '95' | | | | |
| PICC | CT | uid3 | uid4 | uid5 | BCC |
| PICC | CT = '88' | uid3 | uid4 | uid5 | BCC |
| PCD | SEL = '97' | | | | |
| PICC | uid6 | uid7 | uid8 | uid9 | BCC |
@ -147,19 +146,188 @@ ATQA 应答由两个字节16位组成其结构如下
### 2.3.4. ANTICOLLISION 命令
ANTICOLLISION 命令用于解决射频场中多张卡片同时响应的问题,通过逐步发送卡片的 UID 部分读写器可以唯一识别每张卡片。该命令在不同的级联级别Cascade Level使用不同的标识符 `'93'`, `'95'`, `'97'`,分别表示第一级、第二区和第三级的防冲突级别。
ANTICOLLISION 命令的帧结构如下:
### 2.3.5. SELECT命令
| SOF | SEL | NVB | EOF |
| ---- | ------------------------------------------------------------ | ------ | ---- |
| | `0x93`Cascade Level 1`0x95`Cascade Level 2`0x97`Cascade Level 3 | `0x20` | |
**交互流程**
1. **发送 ANTICOLLISION 命令**:读写器向射频场中的卡片发送 ANTICOLLISION 命令,要求卡片发送其 UID 部分。
2. **卡片响应**:卡片根据级联级别,返回部分 UID 和 BCC。
3. **检测冲突**:读写器检测是否存在冲突。如果存在冲突,读写器通过选择特定位进行防冲突处理,直到只剩下一个唯一的 UID。
如果有冲突:
| SOF | SEL8 bits | NVB8 bits | 指定的 UID 比特 | EOF |
| ---- | -------------------------- | ---------------- | --------------- | ---- |
| | `0x93``0x95``0x97` | PCD 指定的比特数 | | |
**交互流程**
1. **发送 SELECT 命令**:读写器向射频场中的卡片发送 ANTICOLLISION 命令,包含卡片的部分 UID。
2. **卡片确认**:卡片收到命令后,若指定 UID 与自身相符,返回自身 UID 余下部分。
3. **进一步通信**:选中的卡片现在可以接收读写器发送的其他命令,如读写操作命令。
### 2.3.5. SELECT 命令
SELECT 命令用于选择和激活在防冲突过程中唯一识别的卡片使其进入选中状态准备接受进一步的命令。SELECT 命令也分为不同的级联级别,使用与 ANTICOLLISION 命令相同的标识符。
SELECT 命令的帧结构如下:
| SOF | SEL8 bits | NVB8 bits | UID | BCC | EOF |
| ---- | -------------------------- | -------------------------- | ---- | ---- | ---- |
| | `0x93``0x95``0x97` | UID 比特长度 + 16 比特长度 | | | |
**交互流程**
1. **发送 SELECT 命令**:读写器向射频场中的卡片发送 SELECT 命令,包含完整 UID 和 BCC 。
2. **卡片确认**:卡片收到命令后,若指定 UID 与自身相符,将会回复 SAK 。
3. **进一步通信**:选中的卡片现在可以接收读写器发送的其他命令,如读写操作命令。
### 2.3.6. SAK应答
SAKSelect Acknowledge应答是卡片PICC在接收到 SELECT 命令后返回给读写器PCD的应答码用于确认卡片是否已被选中并提供一些附加信息。
SAK 应答的帧结构如下:
| SOF | b6 | b5 - b4 | b3 | b2 - b0 | CRC_A16 bits | EOF |
| :--: | :--------------------------------------: | ------- | :----------------------------------------------------: | :-----: | :--------------: | :--: |
| | `1`:支持 ISO/IEC 14443-4`0`:不支持。 | RFU | `1`:表示 UID 不完整,继续防冲突;`0`:表示 UID 完整。 | RFU | | |
**交互流程**
1. **发送 SELECT 命令**:读写器向射频场中的卡片发送 SELECT 命令,包含卡片的部分 UID 和 BCC。
2. **卡片确认**:卡片收到命令后,返回 SAK 码,表示其已被选中并进入选中状态。
3. **进一步通信**:选中的卡片现在可以接收读写器发送的其他命令,如读写操作命令。
### 2.3.7. HALT命令
HALT休眠命令用于使卡片PICC进入休眠状态停止与读写器PCD的通信。这个命令用于结束当前卡片的会话直到卡片被重新唤醒通过 WUPA 命令)。
HALT 命令的帧结构如下:
| SOF | 命令码第一字节 | 命令码第二字节 | CRC_A16 bits | EOF |
| :--: | :------------: | :------------: | :--------------: | :--: |
| | `0x50` | `0x00` | | |
**交互流程**
1. **发送 HALT 命令**PCD 向射频场中的目标卡片发送 HALT 命令。
2. **卡片进入休眠状态**:接收到 HALT 命令的 PICC 将停止响应读写器的进一步命令,进入休眠状态。
3. **重新唤醒**要重新与该卡片通信PCD 需要发送 WUPA 命令将其唤醒。
# 3. 实验过程
IP 和端口保持默认不变。设置 PICC ID 。
## 3.1. PICC ID 为 4 字节
![UID4](images\UID4.png)
**过程分析**
1. **PCD** :发送 REQA ,激活在读写器射频场中的卡片;
2. **PICC** :回复 ATQA bit 8 到 bit 7 为 `00` ,说明 UID 长度为 4 字节bit 5 到 bit 1 含有 `1` ,说明采用比特帧防冲突方式;
3. **PCD** :发送 ANTICOLLISION ,指定查询第 1 级 UID
4. **PICC** :回复 ANTICOLLISION ,回复自己的 UID = `0x80122821` 和 BCC = `0x9b`
5. **PCD** :发现收到的 UID 中,第 2 字节的第 2 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `32` ,即会指定 UID 的前 1 字节和第 2 字节的前 2 比特;指定 UID 前 1 字节为 `80`,第 2 字节的前 2 比特为 `00`
2. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `1` ,与收到的 ANTICOLLISION 命令不匹配,不回复;
3. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `32` ,即会指定 UID 的前 1 字节和第 2 字节的前 2 比特;指定 UID 前 1 字节为 `80`,第 2 字节的前 2 比特为 `10`
4. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `1` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 2 字节的剩下比特为 `000100` ,剩下字节为 `2821`
6. **PCD** :发现收到的 UID 中,第 3 字节的第 4 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `44` ,即会指定 UID 的前 2 字节和第 3 字节的前 4 比特;指定 UID 前 2 字节为 `8012`,第 3 字节的前 4 比特为 `0000`
2. **PICC** :发现自身 UID 第 3 字节的第 4 比特为 `1` ,与收到的 ANTICOLLISION 命令不匹配,不回复;
3. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `32` ,即会指定 UID 的前 2 字节和第 3 字节的前 4 比特;指定 UID 前 3 字节为 `8012`,第 3 字节的前 4 比特为 `1000`
4. **PICC** :发现自身 UID 第 3 字节的第 4 比特为 `1` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 3 字节的剩下比特为 `0010` ,剩下字节为 `21`
7. **PCD** :发现收到的 UID 中,第 4 字节的第 7 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `57` ,即会指定 UID 的前 3 字节和第 4 字节的前 7 比特;指定 UID 前 3 字节为 `801228`,第 4 字节的前 7 比特为 `0100001`
2. **PICC** :发现自身 UID 第 4 字节的第 7 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 4 字节的剩下比特为 `0` ,无剩下字节;
8. **PCD** :发送 SELECT 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `70` ;指定 UID = `80122821` BCC = `9b`
9. **PICC** :回复 SAK = `00` ,表示不支持 ISO/IEC 14443-4 UID 已完整;
10. **PCD** :发送 HALT 命令,使得被选中的卡片进入睡眠状态。
## 3.2. PICC ID 为 7 字节
![UID7PCD](images\UID7PCD.png)
![UID7PICC](images\UID7PICC.png)
**过程分析**
1. **PCD** :发送 REQA ,激活在读写器射频场中的卡片;
2. **PICC** :回复 ATQA bit 8 到 bit 7 为 `01` ,说明 UID 长度为 7 字节bit 5 到 bit 1 含有 `1` ,说明采用比特帧防冲突方式;
3. **PCD** :发送 ANTICOLLISION ,指定查询第 1 级 UID
4. **PICC** :回复 ANTICOLLISION ,回复第 1 级UID = `0x88801228` 和 BCC = `0x32`
5. **PCD** :发现收到的 UID 中,第 2 字节的第 2 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `32` ,即会指定 UID 的前 1 字节和第 2 字节的前 2 比特;指定 UID 前 1 字节为 `88`,第 2 字节的前 2 比特为 `00`
2. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 2 字节的剩下比特为 `100000` ,剩下字节为 `1228`
6. **PCD** :发现收到的 UID 中,第 3 字节的第 4 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `44` ,即会指定 UID 的前 2 字节和第 3 字节的前 4 比特;指定 UID 前 2 字节为 `8880`,第 3 字节的前 4 比特为 `0010`
2. **PICC** :发现自身 UID 第 3 字节的第 4 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 3 字节的剩下比特为 `0001` ,剩下字节为 `28`
7. **PCD** :发现收到的 UID 中,第 4 字节的第 7 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `57` ,即会指定 UID 的前 3 字节和第 4 字节的前 7 比特;指定 UID 前 3 字节为 `888012`,第 4 字节的前 7 比特为 `0101000`
2. **PICC** :发现自身 UID 第 4 字节的第 7 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 4 字节的剩下比特为 `0` ,无剩下字节;
8. **PCD** :发送 SELECT 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `70` ;指定 UID = `88801228` BCC = `32`
9. **PICC** :回复 SAK = `04` ,表示不支持 ISO/IEC 14443-4 UID 未完整;
10. **PCD** :发送 ANTICOLLISION ,指定查询第 2 级 UID
11. **PICC** :回复 ANTICOLLISION ,回复第 2 级UID = `0x21441020` 和 BCC = `0x55`
12. **PCD** :发现收到的 UID 中,第 1 字节的第 5 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x95` 第 2 级 UID ;指定 NVB = `25` ,即会指定 UID 的第 1 字节的前 5 比特为 `00001`
2. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 2 字节的剩下比特为 `001` ,剩下字节为 `441020`
13. **PCD** :发送 SELECT 命令,指定 `0x95` 第 2 级 UID ;指定 NVB = `70` ;指定 UID = `21441020` BCC = `55`
14. **PICC** :回复 SAK = `00` ,表示不支持 ISO/IEC 14443-4 UID 已完整;
15. **PCD** :发送 HALT 命令,使得被选中的卡片进入睡眠状态。
## 3.3. PICC ID 为 10 字节
![UID10PCD](images\UID10PCD.png)
![UID10PICC](images\UID10PICC.png)
**过程分析**
1. **PCD** :发送 REQA ,激活在读写器射频场中的卡片;
2. **PICC** :回复 ATQA bit 8 到 bit 7 为 `10` ,说明 UID 长度为 10 字节bit 5 到 bit 1 含有 `1` ,说明采用比特帧防冲突方式;
3. **PCD** :发送 ANTICOLLISION ,指定查询第 1 级 UID
4. **PICC** :回复 ANTICOLLISION ,回复第 1 级UID = `0x88563412` 和 BCC = `0xf8`
5. **PCD** :发现收到的 UID 中,第 2 字节的第 2 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `32` ,即会指定 UID 的前 1 字节和第 2 字节的前 2 比特;指定 UID 前 1 字节为 `88`,第 2 字节的前 2 比特为 `00`
2. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `1` ,与收到的 ANTICOLLISION 命令不匹配,不回复;
3. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `32` ,即会指定 UID 的前 1 字节和第 2 字节的前 2 比特;指定 UID 前 1 字节为 `88`,第 2 字节的前 2 比特为 `10`
4. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 2 字节的剩下比特为 `0101001` ,剩下字节为 `3412`
6. **PCD** :发现收到的 UID 中,第 3 字节的第 4 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `44` ,即会指定 UID 的前 2 字节和第 3 字节的前 4 比特;指定 UID 前 2 字节为 `8856`,第 3 字节的前 4 比特为 `0100`
2. **PICC** :发现自身 UID 第 3 字节的第 4 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 3 字节的剩下比特为 `0011` ,剩下字节为 `12`
7. **PCD** :发现收到的 UID 中,第 4 字节的第 7 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `57` ,即会指定 UID 的前 3 字节和第 4 字节的前 7 比特;指定 UID 前 3 字节为 `885634`,第 4 字节的前 7 比特为 `0010010`
2. **PICC** :发现自身 UID 第 4 字节的第 7 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 4 字节的剩下比特为 `0` ,无剩下字节;
8. **PCD** :发送 SELECT 命令,指定 `0x93` 第 1 级 UID ;指定 NVB = `70` ;指定 UID = `88563412` BCC = `f8`
9. **PICC** :回复 SAK = `04` ,表示不支持 ISO/IEC 14443-4 UID 未完整;
10. **PCD** :发送 ANTICOLLISION ,指定查询第 2 级 UID
11. **PICC** :回复 ANTICOLLISION ,回复第 2 级UID = `0x88801228` 和 BCC = `0x32`
12. **PCD** :发现收到的 UID 中,第 2 字节的第 5 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x95` 第 2 级 UID ;指定 NVB = `25` ,即会指定 UID 的第 1 字节的前 5 比特为 `01000`
2. **PICC** :发现自身 UID 第 2 字节的第 2 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 2 字节的剩下比特为 `100` ,剩下字节为 `801228`
13. **PCD** :发送 SELECT 命令,指定 `0x95` 第 2 级 UID ;指定 NVB = `70` ;指定 UID = `88801228` BCC = `32`
14. **PICC** :回复 SAK = `04` ,表示不支持 ISO/IEC 14443-4 UID 未完整;
15. **PCD** :发送 ANTICOLLISION ,指定查询第 3 级 UID
16. **PICC** :回复 ANTICOLLISION ,回复第 3 级UID = `0x21440010` 和 BCC = `0x75`
17. **PCD** :发现收到的 UID 中,第 2 字节的第 5 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x97` 第 3 级 UID ;指定 NVB = `35` ,即会指定 UID 的前 1 字节和第 2 字节的前 5 比特;指定 UID 前 1 字节为 `21`,第 2 字节的前 5 比特为 `00100`
2. **PICC** :发现自身 UID 第 2 字节的第 5 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 2 字节的剩下比特为 `010` ,剩下字节为 `0010`
18. **PCD** :发现收到的 UID 中,第 2 字节的第 8 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x97` 第 3 级 UID ;指定 NVB = `40` ,即会指定 UID 的前 3 字节为 `2144`
2. **PICC** :发现自身 UID 第 2 字节的第 8 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复 UID 剩下字节为 `0010`
19. **PCD** :发现收到的 UID 中,第 4 字节的第 7 比特发生了碰撞。处理碰撞:
1. **PCD** :发送 ANTICOLLISION 命令,指定 `0x97` 第 3 级 UID ;指定 NVB = `57` ,即会指定 UID 的前 3 字节和第 4 字节的前 7 比特;指定 UID 前 3 字节为 `214400`,第 4 字节的前 7 比特为 `0010000`
2. **PICC** :发现自身 UID 第 4 字节的第 7 比特为 `0` ,与收到的 ANTICOLLISION 命令匹配,回复剩下的 UID :第 4 字节的剩下比特为 `0` ,无剩下字节;
20. **PCD** :发送 SELECT 命令,指定 `0x97` 第 3 级 UID ;指定 NVB = `70` ;指定 UID = `21440010` BCC = `75`
21. **PICC** :回复 SAK = `00` ,表示不支持 ISO/IEC 14443-4 UID 已完整;
22. **PCD** :发送 HALT 命令,使得被选中的卡片进入睡眠状态。

Binary file not shown.

Binary file not shown.

Binary file not shown.