OS-VVM (Диплом)/Спецификация микросхемы Mifare Ultralight — различия между версиями
ANA (обсуждение | вклад) м (→Команда READ) |
м (→Состояние ACTIVE) |
||
Строка 441: | Строка 441: | ||
|rowspan=2| READ ||Parity & CRC = ok||Чтение 16 байт||ACTIVE | |rowspan=2| READ ||Parity & CRC = ok||Чтение 16 байт||ACTIVE | ||
|- | |- | ||
− | + | | Parity & CRC ≠ ok || — || IDLE | |
|- | |- | ||
|rowspan=2| WRITE ||—||Запись 4 байт||ACTIVE | |rowspan=2| WRITE ||—||Запись 4 байт||ACTIVE | ||
|- | |- | ||
− | + | | Parity & CRC ≠ ok || — || IDLE | |
|- | |- | ||
|rowspan=2| CWRITE ||Данные записи = 16 байт||Запись 4 байт||ACTIVE | |rowspan=2| CWRITE ||Данные записи = 16 байт||Запись 4 байт||ACTIVE | ||
|- | |- | ||
− | + | | Parity & CRC ≠ ok || — || IDLE | |
|- | |- | ||
− | + | | Other CMD || — || — || IDLE | |
|} | |} | ||
Версия 11:02, 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 | 0..47 | Часть UID + BCC1 |
0х95 | 0х20-0х67 | s8p8pee | 16+5 | Антиколлизия каскадного уровня 2 | UID + BCC2 | s8p...8pBCC2e | 0..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 | 0..75 | Выбор каскадного уровня 1 | SAK ('04') | s8pC0pC1pe | 24+5 | SAK ('04') + CRC |
0х95 | 0х70 + UID cl2 | s8p..8pBCC2ee | 0..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 |