OS-VVM (Диплом)/Спецификация микросхемы Mifare Ultralight — различия между версиями
ANA  (обсуждение | вклад) м (→CRC16)  | 
			ANA  (обсуждение | вклад)  м (→NEW)  | 
			||
| Строка 264: | Строка 264: | ||
return(0);  | return(0);  | ||
</source>  | </source>  | ||
| + | |||
| + | == Диаграмма состояний микросхемы ==  | ||
| + | |||
| + | <graph>  | ||
| + | digraph G{  | ||
| + | #compound=true;  | ||
| + | node [style=filled fillcolor=pink2, shape=ellipse,fontsize=12,margin="0.01,0.05"]  | ||
| + | edge[color="darkgreen",fontcolor="blue",fontsize=12,constraint=false];  | ||
| + | POR -> IDLE [constraint=true]  | ||
| + | IDLE   -> READY1 [label="REQA, WUPA",constraint=true]  | ||
| + | READY1 -> READY1 [label="Anticollision"]  | ||
| + | READY1 -> READY2 [label="SelectL1",constraint=true]  | ||
| + | READY1 -> ACTIVE [label="READ(0)",tailport=se,headport=ne]  | ||
| + | READY2 -> READY2 [label="Anticollision"]  | ||
| + | READY2 -> ACTIVE [label="SelectL2",constraint=true]  | ||
| + | READY2 -> ACTIVE [label="READ(0)"]  | ||
| + | ACTIVE -> ACTIVE [label="WRITE, CWRITE",rankdir=RL]  | ||
| + | #ACTIVE -> ACTIVE [label="WRITE, CWRITE",tailport=w,headport=sw,constraint=true]  | ||
| + | ACTIVE -> ACTIVE [label="READ",rankdir=RH]  | ||
| + | ACTIVE -> HALT [label="HALT",headport=se]  | ||
| + | HALT   -> READY1 [label="WUPA",constraint=true]  | ||
| + | |||
| + | edge[color="gray",fontcolor="gray",fontsize=11,constraint=false];  | ||
| + | READY1 -> IDLE   [color="gray",label="READ(>0)"]  | ||
| + | READY2 -> IDLE   [color="gray",label="READ(>0)"]  | ||
| + | ACTIVE -> IDLE [color="gray",label="REQA, WUPA,\n SEL1/2,\n Anticollison"]  | ||
| + | |||
| + | |||
| + | {rank=same IDLE HALT}  | ||
| + | |||
| + | }</graph>  | ||
== NEW ==  | == NEW ==  | ||
Версия 14:26, 1 апреля 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);
Диаграмма состояний микросхемы