diff --git a/Labs/Lab2/source/images/UID10PCD.png b/Labs/Lab2/source/images/UID10PCD.png
new file mode 100644
index 0000000..020670c
Binary files /dev/null and b/Labs/Lab2/source/images/UID10PCD.png differ
diff --git a/Labs/Lab2/source/images/UID10PICC.png b/Labs/Lab2/source/images/UID10PICC.png
new file mode 100644
index 0000000..ca9a12d
Binary files /dev/null and b/Labs/Lab2/source/images/UID10PICC.png differ
diff --git a/Labs/Lab2/source/images/UID4.png b/Labs/Lab2/source/images/UID4.png
new file mode 100644
index 0000000..5c57fca
Binary files /dev/null and b/Labs/Lab2/source/images/UID4.png differ
diff --git a/Labs/Lab2/source/images/UID7PCD.png b/Labs/Lab2/source/images/UID7PCD.png
new file mode 100644
index 0000000..5825860
Binary files /dev/null and b/Labs/Lab2/source/images/UID7PCD.png differ
diff --git a/Labs/Lab2/source/images/UID7PICC.png b/Labs/Lab2/source/images/UID7PICC.png
new file mode 100644
index 0000000..1a120e1
Binary files /dev/null and b/Labs/Lab2/source/images/UID7PICC.png differ
diff --git a/Labs/Lab2/source/实验2_21281280_柯劲帆.md b/Labs/Lab2/source/实验2_21281280_柯劲帆.md
index c314ab5..57d8c94 100644
--- a/Labs/Lab2/source/实验2_21281280_柯劲帆.md
+++ b/Labs/Lab2/source/实验2_21281280_柯劲帆.md
@@ -7,10 +7,9 @@
姓名:柯劲帆
班级:物联网2101班
指导老师:赵帅锋
- 日期:2024年6月8日
+ 日期:2024年6月9日
-
---
[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 | SEL(8 bits) | NVB(8 bits) | 指定的 UID 比特 | EOF |
+| ---- | -------------------------- | ---------------- | --------------- | ---- |
+| | `0x93` 或 `0x95` 或 `0x97` | PCD 指定的比特数 | | |
+
+**交互流程**:
+
+1. **发送 SELECT 命令**:读写器向射频场中的卡片发送 ANTICOLLISION 命令,包含卡片的部分 UID。
+2. **卡片确认**:卡片收到命令后,若指定 UID 与自身相符,返回自身 UID 余下部分。
+3. **进一步通信**:选中的卡片现在可以接收读写器发送的其他命令,如读写操作命令。
+
+### 2.3.5. SELECT 命令
+
+SELECT 命令用于选择和激活在防冲突过程中唯一识别的卡片,使其进入选中状态,准备接受进一步的命令。SELECT 命令也分为不同的级联级别,使用与 ANTICOLLISION 命令相同的标识符。
+
+SELECT 命令的帧结构如下:
+
+| SOF | SEL(8 bits) | NVB(8 bits) | UID | BCC | EOF |
+| ---- | -------------------------- | -------------------------- | ---- | ---- | ---- |
+| | `0x93` 或 `0x95` 或 `0x97` | UID 比特长度 + 16 比特长度 | | | |
+
+**交互流程**:
+
+1. **发送 SELECT 命令**:读写器向射频场中的卡片发送 SELECT 命令,包含完整 UID 和 BCC 。
+2. **卡片确认**:卡片收到命令后,若指定 UID 与自身相符,将会回复 SAK 。
+3. **进一步通信**:选中的卡片现在可以接收读写器发送的其他命令,如读写操作命令。
### 2.3.6. SAK应答
+SAK(Select Acknowledge)应答是卡片(PICC)在接收到 SELECT 命令后返回给读写器(PCD)的应答码,用于确认卡片是否已被选中,并提供一些附加信息。
+SAK 应答的帧结构如下:
+
+| SOF | b6 | b5 - b4 | b3 | b2 - b0 | CRC_A(16 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_A(16 bits) | EOF |
+| :--: | :------------: | :------------: | :--------------: | :--: |
+| | `0x50` | `0x00` | | |
+
+**交互流程**:
+
+1. **发送 HALT 命令**:PCD 向射频场中的目标卡片发送 HALT 命令。
+2. **卡片进入休眠状态**:接收到 HALT 命令的 PICC 将停止响应读写器的进一步命令,进入休眠状态。
+3. **重新唤醒**:要重新与该卡片通信,PCD 需要发送 WUPA 命令将其唤醒。
+
# 3. 实验过程
+IP 和端口保持默认不变。设置 PICC ID 。
+
+## 3.1. PICC ID 为 4 字节
+
+
+
+**过程分析**:
+
+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 字节
+
+
+
+
+
+**过程分析**:
+
+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 字节
+
+
+
+
+
+**过程分析**:
+
+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 命令,使得被选中的卡片进入睡眠状态。
diff --git a/Labs/Lab2/tmp/pcd.exe b/Labs/Lab2/tmp/pcd.exe
deleted file mode 100644
index edf73a5..0000000
Binary files a/Labs/Lab2/tmp/pcd.exe and /dev/null differ
diff --git a/Labs/Lab2/tmp/picc.exe b/Labs/Lab2/tmp/picc.exe
deleted file mode 100644
index 5142381..0000000
Binary files a/Labs/Lab2/tmp/picc.exe and /dev/null differ
diff --git a/Labs/Lab2/实验2_21281280_柯劲帆.pdf b/Labs/Lab2/实验2_21281280_柯劲帆.pdf
new file mode 100644
index 0000000..6b0800c
Binary files /dev/null and b/Labs/Lab2/实验2_21281280_柯劲帆.pdf differ