OS-VVM (Диплом)/Спецификация микросхемы Mifare Ultralight — различия между версиями
м (→Команда Anticollision L1)  | 
			м (→Анализ команд и ответов ИМС)  | 
			||
| (не показаны 8 промежуточных версий 2 участников) | |||
| Строка 90: | Строка 90: | ||
| UID + BCC1  | | UID + BCC1  | ||
| s8p..8pBCC1e  | | s8p..8pBCC1e  | ||
| − | |   | + | | 2..47  | 
| Часть UID + BCC1  | | Часть UID + BCC1  | ||
|-  | |-  | ||
| Строка 100: | Строка 100: | ||
| UID + BCC2  | | UID + BCC2  | ||
| s8p...8pBCC2e  | | s8p...8pBCC2e  | ||
| − | |   | + | | 2..47  | 
| Часть UID + BCC2  | | Часть UID + BCC2  | ||
|-  | |-  | ||
| Строка 156: | Строка 156: | ||
| 0х70 + UID cl1  | | 0х70 + UID cl1  | ||
| s8p..8pBCC1ee  | | s8p..8pBCC1ee  | ||
| − | |   | + | | 75  | 
| Выбор каскадного уровня 1  | | Выбор каскадного уровня 1  | ||
| SAK ('04')  | | SAK ('04')  | ||
| Строка 166: | Строка 166: | ||
| 0х70 + UID cl2  | | 0х70 + UID cl2  | ||
| s8p..8pBCC2ee  | | s8p..8pBCC2ee  | ||
| − | |   | + | | 75  | 
| Выбор каскадного уровня 2  | | Выбор каскадного уровня 2  | ||
| SAK ('00')  | | SAK ('00')  | ||
| Строка 402: | Строка 402: | ||
| SELECT L2 ||—||Выбор второй половины UID||ACTIVE  | | SELECT L2 ||—||Выбор второй половины UID||ACTIVE  | ||
|-  | |-  | ||
| − | | READ ||Адрес = 0||—||ACTIVE  | + | |rowspan=2| READ ||Адрес = 0||—||ACTIVE  | 
|-  | |-  | ||
| − | + | |Адрес ≠ 0||—||IDLE  | |
|-  | |-  | ||
| WRITE ||—||—||IDLE  | | WRITE ||—||—||IDLE  | ||
| Строка 439: | Строка 439: | ||
| SELECT L2 ||—||—||IDLE  | | SELECT L2 ||—||—||IDLE  | ||
|-  | |-  | ||
| − | | READ ||  | + | |rowspan=2| READ ||Parity & CRC = ok||Чтение 16 байт||ACTIVE  | 
|-  | |-  | ||
| − | |   | + | | Parity & CRC ≠ ok || — || IDLE  | 
|-  | |-  | ||
| − | |   | + | |rowspan=2| WRITE ||—||Запись 4 байт||ACTIVE  | 
|-  | |-  | ||
| − | |   | + | | Parity & CRC ≠ ok || — || IDLE  | 
| + | |-  | ||
| + | |rowspan=2| CWRITE ||Данные записи = 16 байт||Запись 4 байт||ACTIVE  | ||
| + | |-  | ||
| + | | Parity & CRC ≠ ok || — || IDLE  | ||
| + | |-  | ||
| + | | Other CMD || — || — || IDLE  | ||
|}  | |}  | ||
| Строка 529: | Строка 535: | ||
{| class=standard align=center  | {| class=standard align=center  | ||
| + | |+ Команда READ  | ||
| + | |-  | ||
! Starting State ||  Condition || Response || Next State  | ! Starting State ||  Condition || Response || Next State  | ||
|-  | |-  | ||
| Строка 534: | Строка 542: | ||
|-  | |-  | ||
| rowspan=2 | READY1  | | rowspan=2 | READY1  | ||
| − | | Адрес = 0  | + | | Адрес = 0  & (Parity & CRC) <nowiki>=</nowiki> OK || 16 байт + CRC || ACTIVE  | 
| − | | 16 байт + CRC    | + | |
| − | | ACTIVE  | + | |
|-  | |-  | ||
| − | | Адрес ≠ 0  | + | | Адрес ≠ 0 <nowiki>|</nowiki> (Parity & CRC) ≠ OK || — || IDLE  | 
| − | | —  | + | |
| − | | IDLE  | + | |
|-  | |-  | ||
| − | | READY2  | + | | rowspan=2 | READY2    | 
| − | |   | + | | Адрес <nowiki>=</nowiki> 0  & (Parity & CRC) <nowiki>=</nowiki> OK || 16 байт + CRC || ACTIVE  | 
| − | |   | + | |
| − | |   | + | |
|-  | |-  | ||
| − | |   | + | | Адрес ≠ 0 <nowiki>|</nowiki> (Parity & CRC) ≠ OK || — || IDLE  | 
| − | | —  | + | |-  | 
| − | | 16 байт + CRC  | + | | rowspan=2 | ACTIVE  | 
| − | | ACTIVE  | + | | Адрес <nowiki>=</nowiki> 0..15 & (Parity & CRC) <nowiki>=</nowiki> OK || 16 байт + CRC || ACTIVE  | 
| + | |-  | ||
| + | | Адрес ≠ 0..15 <nowiki>|</nowiki> (Parity & CRC) ≠ OK || — || IDLE  | ||
|-  | |-  | ||
| HALT  | | HALT  | ||
| Строка 681: | Строка 685: | ||
| READY1  || — || — || IDLE     | | READY1  || — || — || IDLE     | ||
|-  | |-  | ||
| − | | READY2  || — || Часть UID   | + | | READY2  || — || Часть второй половины UID + BCC || READY2    | 
| + | |-  | ||
| + | | ACTIVE  || — || — || IDLE   | ||
| + | |-  | ||
| + | |  | ||
| + | |  | ||
| + | |  | ||
| + | |  | ||
| + | |}  | ||
| + | |||
| + | ==== Команда Select L2 ====  | ||
| + | |||
| + | {| class=standard align=center  | ||
| + | ! Starting State ||  Condition || Response || Next State  | ||
| + | |-  | ||
| + | | IDLE  || — || — || IDLE    | ||
| + | |-  | ||
| + | | HALT  || — || — || HALT  | ||
| + | |-  | ||
| + | | READY1  || — || — || IDLE    | ||
| + | |-  | ||
| + | | READY2  || — || Вторая половина UID + BCC || ACTIVE     | ||
|-  | |-  | ||
| ACTIVE  || — || — || IDLE    | | ACTIVE  || — || — || IDLE    | ||
Текущая версия на 12:37, 19 апреля 2013
- Спецификация ИМС
 - Тестовый план
 - Описание тестовой программы
 
- Метрики и процессы покрытия (en)
 - Coverage Examples (Practice) (en)
 - Requirements Writing Guidelines (en)
 
Содержание | 
Описание микросхемы
Список вопросов
Описание входных/выходных протоколов
Требования, предъявляемые к временным ограничениям сигналов
- частота (fc) 13,56 МГц ± 7 кГц
 - длительность паузы 27/fc - 41/fc (2-3 мкс)
 - защитный интервал блока 1172/fc - 1236/fc (86,43 - 91,15 мкс)
 - длительность передачи одного бита 128/fc (9,44 мкс)
 
Представление и кодирование бит при передаче от ридера к карте
Определены следующие последовательности:
-  X: 	после времени 64/fc (4,72 мкс)  должна быть "пауза"
 -  Y:	для всей длительности бита 128/fc (9,44 мкс) модуляции не должно быть
 -  Z:	в начале длительности бита должна быть "пауза".
 
              Z    Y    X
           –|_–––|––––|––_–|–
Данные последовательности используются для кодирования следующей информации:
- логическая "1" последовательность Х
 -  логический "0"	последовательность Y со следующими двумя исключениями:
- а) если два или более смежных (граничащих) "0", то последовательность Z должна быть использована для следующего "0"
 - б) если первым битом после старта кадра является "0", последовательность Z должна быть использована для представления этого и любых "0"-ей, которые следуют прямо после этого.
 
 -  старт передачи:	последовательность Z
 -  конец передачи:	логический "0" следует с последовательностью Y
 -  нет информации:	по крайней мере две последовательности Y.
 
Представление и кодирование бит при передаче от карты к ридеру
Биты кодируются Манчестерским кодом со следующими определениями:
последовательность D: 	несущая модулируется поднесущей для первой половины (50%) длительности бита
последовательность E: 	несущая модулируется поднесущей для второй половины (50%) длительности бита
последовательность F: 	несущая не модулируется поднесущей для длительности одного бита
логическая "1" 	последовательность D
логический "0" 	последовательность E
старт передачи: последовательность D
конец передачи: последовательность F
нет информации:	нет поднесущей.
Анализ команд и ответов ИМС
| Команда | Ответ | |||||||
|---|---|---|---|---|---|---|---|---|
| Код | Аргумент | Формат | Размер | Описание | Код | Формат | Размер | Описание | 
| 0х26 | - | s7ee | 7+3 | REQA (запрос карты) | 0х0044 | s8p8pe | 16+4 | ATQA | 
| 0х52 | - | s7ee | 7+3 | WUPA (запрос всех карт) | 0х0044 | s8p8pe | 16+4 | ATQA | 
| 0х93 | 0х20-0х67 | s8p8pee | 16+5 | Антиколлизия каскадного уровня 1 | UID + BCC1 | s8p..8pBCC1e | 2..47 | Часть UID + BCC1 | 
| 0х95 | 0х20-0х67 | s8p8pee | 16+5 | Антиколлизия каскадного уровня 2 | UID + BCC2 | s8p...8pBCC2e | 2..47 | Часть UID + BCC2 | 
| 0х30 | Адрес | s8p8pC0pC1pee | 32+7 | READ (чтение) | 16 байт данных + CRC | s8p..8pC0pC1pe | 144+20 | 16 байт данных + CRC | 
| 0х50 | 0х00 | s8p8pC0pC1pee | 32+7 | HALT (остановка) | (N)AK | s7e | 7+2 | Пассивный AK или NAK | 
| 0хA2 | Адрес+данные | s8p8p8p8p8p8pC0pC1pee | 64+11 | WRITE (запись) | (N)AK | s7e | 7+2 | AK или NAK | 
| 0хA0 | Адрес+данные | s8p8p8p8pC0pC1pee | 48+9 | COMPATIBILITY WRITE (совместимая запись) | (N)AK | s7e | 7+2 | AK или NAK | 
| - | - | s8p..8pC0pC1pee | 144+20 | COMPATIBILITY WRITE (совместимая запись) | (N)AK | s7e | 7+2 | AK или NAK | 
| 0х93 | 0х70 + UID cl1 | s8p..8pBCC1ee | 75 | Выбор каскадного уровня 1 | SAK ('04') | s8pC0pC1pe | 24+5 | SAK ('04') + CRC | 
| 0х95 | 0х70 + UID cl2 | s8p..8pBCC2ee | 75 | Выбор каскадного уровня 2 | SAK ('00') | s8pC0pC1pe | 24+5 | SAK ('00') + CRC | 
Принятые обозначения:
- s — SOF (1 бит)
 - e — EOF (2 бит для команды, 1 бит для ответа)
 - p — четность (1 бит)
 - C0, С1 — CRC (8ст+8мл бит)
 - BCC — контрольная сумма (8 бит)
 
Расчёт контрольных сумм
Контроль четности
Р = 0, при нечетном количестве единиц
Р = 1, при четном количестве единиц
BCC
Вычисляется как "исключающее или" по 4 предыдущим байтам
CRC16
B.3 Code sample written in C language for CRC calculation
#include #include #include #include <stdio.h> <stdlib.h> <string.h> <ctype.h> #define CRC_A 1 #define CRC_B 2 #define BYTE unsigned char unsigned short UpdateCrc(unsigned char ch, unsigned short *lpwCrc) { ch = (ch^(unsigned char)((*lpwCrc) & 0x00FF)); ch = (ch^(ch<<4)); *lpwCrc = (*lpwCrc >> 8)^((unsigned short)ch << 8)^((unsigned short)ch<<3)^((unsigned short)ch>>4); } return(*lpwCrc); void ComputeCrc(int CRCType, char *Data, int Length, BYTE *TransmitFirst, BYTE *TransmitSecond) { unsigned char chBlock; unsigned short wCrc; switch(CRCType) { case CRC_A: wCrc = 0x6363; // ITU-V.41 break; case CRC_B: wCrc = 0xFFFF; // ISO 3309 break; default: return; } do { chBlock = *Data++; UpdateCrc(chBlock, &wCrc); } while (--Length); if (CRCType == CRC_B) wCrc = ~wCrc; // ISO 3309 *TransmitFirst = (BYTE) (wCrc & 0xFF); *TransmitSecond = (BYTE) ((wCrc >> 8) & 0xFF); } return; BYTE BuffCRC_A[10] = {0x12, 0x34}; BYTE BuffCRC_B[10] = {0x0A, 0x12, 0x34, 0x56}; unsigned short Crc; BYTE First, Second; FILE *OutFd; int i; int main(void) { printf("CRC-16 reference results 3-Jun-1999\n"); printf("by Mickey Cohen - mickey@softchip.com\n\n"); printf("Crc-16 G(x) = x^16 + x^12 + x^5 + 1\n\n"); printf("CRC_A of [ "); for(i=0; i<2; i++) printf("%02X ",BuffCRC_A[i]); ComputeCrc(CRC_A, BuffCRC_A, 2, &First, &Second); printf("] Transmitted: %02X then %02X.\n", First, Second); printf("CRC_B of [ "); for(i=0; i<4; i++) printf("%02X ",BuffCRC_B[i]); ComputeCrc(CRC_B, BuffCRC_B, 4, &First, &Second); printf("] Transmitted: %02X then %02X.\n", First, Second); } return(0);
Диаграмма состояний микросхемы
Таблица переходов
Состояние POR
Состояние IDLE
| Command | Condition | Action | Next State | 
|---|---|---|---|
| REQA | — | Чтение (инициализация) LockBits | READY1 | 
| HALT | — | — | IDLE | 
| WUPA | — | Чтение (инициализация) LockBits | READY1 | 
| ANTICOLISION L1 | — | — | IDLE | 
| SELECT L1 | — | — | IDLE | 
| ANTICOLISION L1 | — | — | IDLE | 
| SELECT L2 | — | — | IDLE | 
| READ | — | — | IDLE | 
| WRITE | — | — | IDLE | 
| CWRITE | — | — | IDLE | 
Состояние READY1
| Command | Condition | Action | Next State | 
|---|---|---|---|
| REQA | — | — | IDLE | 
| HALT | — | — | IDLE | 
| WUPA | — | — | IDLE | 
| ANTICOLISION L1 | — | Выбор части первой половины UID | READY1 | 
| SELECT L1 | — | Выбор первой половины UID | READY2 | 
| ANTICOLISION L2 | — | IDLE | |
| SELECT L2 | — | — | IDLE | 
| READ | Адрес = 0 | — | ACTIVE | 
| READ | Адрес ≠ 0 | — | IDLE | 
| WRITE | — | — | IDLE | 
| CWRITE | — | — | IDLE | 
Состояние READY2
| Command | Condition | Action | Next State | 
|---|---|---|---|
| REQA | — | — | IDLE | 
| HALT | — | — | IDLE | 
| WUPA | — | — | IDLE | 
| ANTICOLLISION L1 | — | — | IDLE | 
| SELECT L1 | — | — | IDLE | 
| ANTICOLLISION L2 | — | Выбор части второй половины UID | READY2 | 
| SELECT L2 | — | Выбор второй половины UID | ACTIVE | 
| READ | Адрес = 0 | — | ACTIVE | 
| Адрес ≠ 0 | — | IDLE | |
| WRITE | — | — | IDLE | 
| CWRITE | — | — | IDLE | 
Состояние ACTIVE
| Command | Condition | Action | Next State | 
|---|---|---|---|
| REQA | — | — | IDLE | 
| HALT | — | — | HALT | 
| WUPA | — | — | IDLE | 
| ANTICOLISION L1 | — | — | IDLE | 
| SELECT L1 | — | — | IDLE | 
| ANTICOLISION L1 | — | — | IDLE | 
| SELECT L2 | — | — | IDLE | 
| READ | Parity & CRC = ok | Чтение 16 байт | ACTIVE | 
| Parity & CRC ≠ ok | — | IDLE | |
| WRITE | — | Запись 4 байт | ACTIVE | 
| Parity & CRC ≠ ok | — | IDLE | |
| CWRITE | Данные записи = 16 байт | Запись 4 байт | ACTIVE | 
| Parity & CRC ≠ ok | — | IDLE | |
| Other CMD | — | — | IDLE | 
Состояние HALT
| Command | Condition | Action | Next State | 
|---|---|---|---|
| REQA | — | — | HALT | 
| HALT | — | — | HALT | 
| WUPA | — | — | READY1 | 
| ANTICOLISION L1 | — | — | HALT | 
| SELECT L1 | — | — | HALT | 
| ANTICOLISION L1 | — | — | HALT | 
| SELECT L2 | — | — | HALT | 
| READ | — | — | HALT | 
| WRITE | — | — | HALT | 
| CWRITE | — | — | HALT | 
Таблица ответов
Команда REAQ
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | ATQA (0х0044) | READY1 | 
| READY1 | — | — | IDLE | 
| READY2 | — | — | IDLE | 
| ACTIVE | — | — | IDLE | 
| HALT | — | — | HALT | 
Команда WUPA
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | ATQA (0х0044) | READY1 | 
| READY1 | — | — | IDLE | 
| READY2 | — | — | IDLE | 
| ACTIVE | — | — | IDLE | 
| HALT | — | — | READY1 | 
Команда READ
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| READY1 | Адрес = 0 & (Parity & CRC) = OK | 16 байт + CRC | ACTIVE | 
| Адрес ≠ 0 | (Parity & CRC) ≠ OK | — | IDLE | |
| READY2 | Адрес = 0 & (Parity & CRC) = OK | 16 байт + CRC | ACTIVE | 
| Адрес ≠ 0 | (Parity & CRC) ≠ OK | — | IDLE | |
| ACTIVE | Адрес = 0..15 & (Parity & CRC) = OK | 16 байт + CRC | ACTIVE | 
| Адрес ≠ 0..15 | (Parity & CRC) ≠ OK | — | IDLE | |
| HALT | — | — | HALT | 
Команда HALT
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| HALT | — | — | HALT | 
| READY1 | — | — | IDLE | 
| READY2 | — | — | IDLE | 
| ACTIVE | Нет ошибки | Нет ответа | HALT | 
| Ошибка | NACK (5) | IDLE | |
Команда WRITE
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| READY1 | — | — | IDLE | 
| READY2 | — | — | IDLE | 
| ACTIVE | — | AK или NAK | ACTIVE | 
| HALT | — | — | HALT | 
Команда CWRITE
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| HALT | — | — | HALT | 
| READY1 | — | — | IDLE | 
| READY2 | — | — | IDLE | 
| ACTIVE | — | AK или NAK | ACTIVE | 
Команда Anticollision L1
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| HALT | — | — | HALT | 
| READY1 | — | Часть первой половины UID + BCC | READY1 | 
| READY2 | — | — | IDLE | 
| ACTIVE | — | — | IDLE | 
Команда Select L1
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| HALT | — | — | HALT | 
| READY1 | — | Первая половина UID + BCC | READY2 | 
| READY2 | — | — | IDLE | 
| ACTIVE | — | — | IDLE | 
Команда Anticollision L2
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| HALT | — | — | HALT | 
| READY1 | — | — | IDLE | 
| READY2 | — | Часть второй половины UID + BCC | READY2 | 
| ACTIVE | — | — | IDLE | 
Команда Select L2
| Starting State | Condition | Response | Next State | 
|---|---|---|---|
| IDLE | — | — | IDLE | 
| HALT | — | — | HALT | 
| READY1 | — | — | IDLE | 
| READY2 | — | Вторая половина UID + BCC | ACTIVE | 
| ACTIVE | — | — | IDLE |