Mifare для разработчиков.
Если вы являетесь разработчиком софта для автоматизации и платёжных систем или интегратором, мы с удовольствием рассмотри ваши предложения по включению поддержки нашего оборудования для работы с бесконтактными картами на взаимовыгодной основе.
Семейство MIFARE® с рабочей частотой 13,56 Mгц использует защищённый внешний протокол (ISO14443A), содержит уникальный ID код (32 бит), который менять нельзя и 1-4к перезаписываемого EEPROM, которое можно использовать для своих нужд.
Интерфейс связи с ПК - RS-232 и USB (в зависимости от модели). На уровне динамических библиотек (MiReader.dll для windows входит в комплект поставки) система будет совместима с MFRC500.dll от Philips. То есть говоря проще,если ваш софт работает с родным ридером от Philips через MFRC500.dll, вы можете заменить ридер и dll - всё будет работать также. Подробнее смотрите в разделах:
  • описание Mifare Standard
  • описание Mifare UltraLight
  • описание библиотеки MiReader.dll
  • описание предложенного нами формата карты Mifare 1K
    Покольку карты Mifare изначально проектировались как многоцелевые (для работы с несколькими приложениями одновременно), наша компания разработала формат (мы будем придерживаться его и в дальнейшем), который позволит сторонним разработчикам использовать карты (уже применяющиеся для работы с ПО нашей компании) для своих нужд. Мы всячески призываем к сотрудничеству, ибо стандартизация - вещь великая !

    ВНИМАНИЕ ! - вся дальнейшая информация и новости по этому проекту будет выкладываться на нашем новом сайте www.rfidchip.info

    Ниже приведена для справки наша самая первая версия документации - по большей части она является вольным переводом даташита на филипсовскую карту, поэтому знающим языки рекомендуется ознакомиться с докой от Philips в оригинале.
    Комплект разработчика (SDK)
    Для скачивания доступен SDK, состоящий из DLL для работы с ридером нашей компании, заголовочного файла (с описанием ф-ций), а также небольшого примера для Delphi (своеобразный тест драйвера).
    Скачать SDK.
    ПРИМЕЧАНИЕ: представленный SDK изначально предполагался только для внутреннего использования, поэтому в нем возможны некоторые неточности или неполное описание функций.
    По всем замечаниям/предложениям к работе SDK пожалуйста пишите LeadProg@menja.net.
    Если после изучения примеров Вы почувствуете что вам это пока "не по зубам", но у Вас есть потенциально готовый заказчик на данную технологию, не расстраивайтесь, пишите Майклу, мы обязательно что-нибудь придумаем, т.е. поможем вам заинтегрировать ридер в вашу систему.

    Теперь по порядку по работе с DLL:
    Инициализация
    Начать работу следует с установления интерфейса с ридером, чтобы убедиться, что он вообще подключен ;-) /см ф-цию mfrc500InterfaceOpen/
    Далее необходимо с помощью ф-ции Mf500PcdConfig сбросить ридер в начальное состояние (ибо неизвестно в каком он находится).
    Теперь можем приступать к работе с картами непосредственно.
    Принципы связи
    Работа всегда инициируется ридером. Работа начинается с запроса карт в поле (команда request).
    Цикл антиколлизии (anticollision loop)
    В цикле антиколлизии читается серийный номер карты. Если в радиополе несколько карт, то они могут быть идентифицированы по их уникальным номерам. Одна карта с нужным номером выбирается с помощью команды Select для дальнейшей работы. Остальные карты возвращаются в режим ожидания (до следующего запроса).
    Выбор карты (Select)
    В ответ на SELECT карта возвращет свой тип. Для 4Кб карт - 0х18, для 1Кб карт - 0х08.
    Авторизация доступа к карте
    Все операции с памятью зашифрованы и защищены ключем, поэтому перед началом работы с сектором следует авторизоваться с помощью ф-ции Mf500PiccAuthKey.
    Карта памяти радиометки
    Четыре килобайта EEPROM разбиты на 32 сектора по 4 блока и на 8 секоторов по 16 блоков. Один блок состоит из 16 байт.
    Карта EEPROM
    Данные производителя
    Нулевой блок хранит данные производителя. Уникальный(гарантировано Philips) ID, или серийный номер карты - байт 0..3. Четвертый байт - контрольная сумма номера. Блок данных производителя доступен только для чтения.
    Блоки данных
    Сектора 0..31 содержат по 3 блока данных, а сектора 32..39 - по 15 блоков данных. Блоки данных могут быть сконфигурированы с помощью битов доступа (access bits) для чтения-записи или для хранения значения (value).
    Блоки значения (value)
    Блоки значения позволяют выполнять команды read (чтение), write(запись), increment (увеличение), decrement (уменьшение), restore (восстановление) и transfer (сохранение). Блок значения имеет фиксированый формат, позволяющий обнаружение и исправление ошибок. Блок значения может быть сгенерирован только командой записи.
    Номер байта0123456789101112131415
    Описаниезначение (value)НЕ значение (not value)значение (value)Адр.НЕ адр.Адр.НЕ адр.

    Значение (value) - 4 байтовое знаковое целое число.
    (not value) - 4 байтовое инверсное к value знаковое целое число.
    Адресс (адр) - 1-байтовый адрес, который м.б. использован для реализации ф-йии бэкапа. Изменяется только командой записи.
    Прицеп сектора (Sector Trailer)
    Каждый сектор имеет "прицеп", расположеный в блоке №3 каждого сектора для первых 2х Килобайт и в блоке №15 каждого сектора - для старших 2х Килобайт. Каждый прицеп хранит секретные ключи А и Б, условия доступа для всех блоков в секторе (байты 6..9).
    Номер байта0123456789101112131415
    ОписаниеКлюч А (key A)Биты доступаКлюч Б (key B)

    Работа с памятью
    Перед работой с памятью, необходимо выбрать карту (select) и пройти авторизацию, как было описано выше. Допустимые операции над блоком зависят от используемого ключа и битов доступа в соответствующем "прицепе" (sector trailer).
    блок-схема работы с картами mifare
    Условия доступа (access conditions)
    Условия досутпа к областям данных и к прицепу задаются тремя битами, которые хранятся в прицепе.
    Биты доступа задают, какие ключи необходимы для операций над областью.
    формат прицепа
    Примечание: для младших 2Килобайт, область данных равна 1 блоку (16байт). Для старших 2Килобайт область данных = 5блокам. Т.е. в старших 2Кб, доступ задается не к каждому блоку индивидуально, а к областям по 5 блоков.
    ВНИМАНИЕ: если биты доступа записаны неверно, то сектор становится недоступен - то есть необратимо блокируется и использовать его в дальнейшем НЕ сможет никто !!!
    Условия доступа для прицепа
    В зависимости от значения битов доступа, прицеп сектора м.б. сконфигурирован для чтения/записи, как "никогда", "ключ А", "ключ Б" или "ключ А или Б". Для новых карт, ключ А задается производителем (для Филипса: 00 00 00 00 00 00).
    ВНИМАНИЕ: так как биты доступа могут блокировать доступ к самим себе, следует быть внимательным при разметке новой карты !
    биты доступа условия доступа для... примечания
    ключ А биты доступа ключ Б
    C1C2C3 чтениезаписьчтениезаписьчтениезапись
    0 0 0 никогда ключ А ключ А никогда ключ А ключ А ключ Б может быть прочитан
    0 1 0 никогда никогда ключ А никогда ключ А никогда ключ Б может быть прочитан
    1 0 0 никогда ключ Б ключ А или Б никогда никогда ключ Б
    1 1 0 никогда никогда ключ А или Б никогда никогда никогда
    0 0 1 никогда ключ А ключ А ключ А ключ А ключ А ключ Б может быть прочитан (новая карта)
    0 1 1 никогда ключ Б ключ А или Б ключ Б никогда ключ Б
    1 0 1 никогда никогда ключ А или Б ключ Б никогда никогда
    1 1 1 никогда никогда ключ А или Б никогда никогда никогда

    Условия доступа для областей данных
    В зависимости от значений битов доступа, данные могут быть доступны для чтения/записи: "никогда", по ключу А, по ключу Б или по ключу А или Б. Установка битов доступа определяет допустимые команды и применение карты.
  • блок чтения-записи: доступен и на чтение и на запись
  • блок значения (value): дополнительно позволяет операции increment, decrement, transfer и restore. В случае единицы (001) только чтение и декремент допустимы (для "не пополняемой" карты). В случае 110, "пополнение" возможно с помощью ключа Б.
  • блок данных производителя всегда доступен на чтение, вне зависимости от битов доступа

  • биты доступа условия доступа для... применение
    C1 C2 C3 чтение запись инкремент декремнт, transfer, restore
    0 0 0 ключ А или Б* ключ А или Б* ключ А или Б* ключ А или Б* новая карта**
    0 1 0 ключ А или Б* никогда никогда никогда блок для чтения-записи**
    1 0 0 ключ А или Б* ключ Б* никогда никогда блок для чтения-записи
    1 1 0 ключ А или Б* ключ Б* ключ Б* ключ А или Б* блок значения
    0 0 1 ключ А или Б* никогда никогда ключ А или Б* блок значения**
    0 1 1 ключ Б* ключ Б* никогда никогда блок для чтения-записи
    1 0 1 ключ Б* никогда никогда никогда блок для чтения-записи
    1 1 1 никогда никогда никогда никогда блок для чтения-записи

    * если ключ Б может быть прочитан (из соотв-го прицепа), он не может служить для авторизации.
    ** Consequences: If the RDW tries to authenticate any block of a sector with key B, the card will refuse any subsequent access after authentication.
    При использовании материалов, ссылка на www.KKM.info обязательна!