Простой magnetic stripe writer

Hacker

Professional
Messages
1,044
Reaction score
813
Points
113
Предисловие
После того, как я успешно завершил испытания простейшего считывателя магнитных полос, я приступил к следующему естественному проекту: писатель так же прост, как и считыватель. Хотя я читал противоречивую информацию, я был уверен, что можно записывать треки с помощью магнитной головки от старого музыкального кассетного плеера. Это было дополнительно подтверждено, когда я случайно стер пару карт, используя свой ридер без конденсатора, подключенного к микрофонному входу.

Я провел несколько тестов и, наконец, смог писать треки с низкой плотностью записи, которые позже я мог успешно читать. Однако я обнаружил некоторые проблемы с дорожками с высокой плотностью записи. Хотя я мог их написать, я не смог добиться из них успешного прочтения. Мое исследование показало, что возникла проблема с обработкой более высоких частот, связанных с дорожками с высокой плотностью записи, по сравнению с дорожками с низкой плотностью. Я начал изучать, может ли помочь фильтр полосы пропускания в писателе, но затем я занялся другими предметами, и работа так и не была закончена.

Поэтому все работы долгие годы не публиковались. Однако время от времени некоторые люди присылали мне электронные письма с просьбой предоставить такую информацию. Это побудило меня собрать информацию, и теперь, когда я нашел время, я быстро все это записал. Но работа еще не завершена, я просто опишу свою настройку и предоставлю экспериментальные, но незаконченные инструменты.

Настройка
Мой дизайн для писателя дополняет дизайн для ридера. Я использую ту же магнитную головку, к которой подключил выключатель. В одном положении переключателя (положение чтения) один контакт головки подключен к конденсатору (который не является обязательным, см. Обсуждение выше), а этот - к штекеру разъема для входа микрофона. В другом положении переключателя (положение записи) этот штифт головки подключен к разъему DB-9 (розетка) для последовательного порта (также можно использовать разъем DB-25, если он имеет размер разъем последовательного порта вашего ПК). Другой контакт головки всегда подключен к заземлению как штекера, так и разъема последовательного порта.

Поэтому я использую последовательный порт как источник тока для питания магнитной головки и записи дорожки. Я выбрал последовательный порт, потому что в соответствии со спецификациями и моими экспериментами, это самый мощный источник постоянного тока, доступный на обычных ПК, который управляется регистром (включение / выключение переключается программно), а также имеет то преимущество, что имеет двойную полярность ( +/- 12 В). Внутри последовательного порта есть несколько контактов, которые вы можете использовать в качестве источника. Я выбрал штифт DTR. Это просто соглашение, вы можете использовать и любое другое. С последовательным портом и хорошей магнитной головкой вы можете записывать как магнитные носители с низкой, так и с высокой коэрцитивной силой.

Может возникнуть соблазн использовать звук, выводимый звуковой картой, в качестве источника для магнитной головки, но обычно это не рекомендуется. Для этого есть две основные причины, одна из которых заключается в том, что управлять последовательным портом проще, чем звуковой картой, и вам не нужно генерировать сложную форму волны, идеально подходит прямоугольная волна. Вторая причина заключается в том, что выходной сигнал звуковой карты может не обеспечивать достаточный ток для записи треков без внешнего усилителя.

Важно отметить, что не все магнитные головки подходят для записи с использованием последовательного порта ПК в качестве источника. Некоторым головкам действительно требуется больше тока, чем может быть обеспечено последовательным портом для записи трека. Один из способов выбрать хорошую головку - измерить омическое сопротивление между двумя ее контактами. Чем выше сопротивление, тем лучше. Более высокое сопротивление подразумевает более длинную катушку, что, в свою очередь, означает более высокое магнитное поле для того же протекающего тока. Если вы не можете записывать треки, используя последовательный порт в качестве источника (либо из-за головки, либо из-за последовательного порта, либо из-за их комбинации), вы всегда можете использовать внешний источник питания. Чтобы управлять им, вы можете использовать простую схему, подобную той, что описана ниже, или ее разновидность.

Вы можете подключить положительный вывод источника питания к коллектору кремниевого NPN-транзистора общего назначения. Эмиттер транзистора должен быть подключен к одному выводу переменного резистора, а другой вывод резистора к земле (отрицательный вывод источника питания вместе с землей последовательного порта). Эмиттер также должен быть подключен к положительному выводу электролитического конденсатора, а другой вывод конденсатора - к одному концу магнитной головки. Другой конец магнитной головки должен быть заземлен. База транзистора должна быть подключена к выводу DTR последовательного порта.Таким образом, включив и выключив DTR, вы переключите транзистор, что позволит генерировать ток в магнитной головке (резонаторе RLC). Вы должны настроить переменный резистор на значение, при котором он имеет максимальное сопротивление, при этом легко записывать дорожки.

Для записывающего устройства требуется дополнительное оборудование. Вам нужна система для синхронизации потока данных, которые должны быть записаны, с движением карты. Один из способов сделать это - разместить датчик, который активируется незадолго до того, как магнитная дорожка войдет в контакт с магнитной головкой. На самом деле лучше разместить два датчика, чтобы можно было оценить скорость свайпа. Таким образом, вы можете автоматически адаптировать скорость потока данных, и, таким образом, запись будет записана с правильной номинальной плотностью дорожек.

Я использую очень простой подход к датчику. Я прикрепляю кусок проволоки к магнитной головке, проводя ее по магнитной дорожке (я читаю / записываю карты с помощью процедуры, которая отличается от обычного метода, проводящего карты через голову). Я также закрепляю два провода на плате, куда помещается карта для записи, таким образом, чтобы при протягивании карты провод в магнитной головке последовательно касался обоих проводов на плате, непосредственно перед тем, как дотянуться до магнитной полосы. Провод в магнитной головке подключается к выводу RTS последовательного порта, а провода на плате подключаются к выводу DSR последовательного порта.

Таким образом, ПК знает, когда магнитная головка вот-вот войдет в контакт с магнитным носителем и с какой скоростью. Конечно, есть и другие варианты датчиков. Вполне естественным подходом было бы использование светодиода и фотодиода или фототранзистора для каждого датчика (вы можете получить эти фотоустройства от старой компьютерной мыши-шарика). Это дает преимущество избавления от механических частей, которые всегда легко изнашиваются, но имеет недостаток, заключающийся в необходимости конструировать и устанавливать дополнительные электронные компоненты для поляризации фотоустройств и усиления сигналов. Но вы все равно можете использовать те же контакты последовательного порта и, следовательно, использовать мое программное обеспечение без изменений.

И последнее, но не менее важное: вам понадобится магнит, чтобы стереть карту перед записью. Обычно вы должны стереть всю магнитную полосу, то есть все три обычных дорожки одновременно, протирая магнитную полосу от одного конца до другого с помощью магнита. Обычно достаточно одного прохода, но на всякий случай можно сделать несколько. Эта процедура действительна для магнитных сред с низкой и высокой коэрцитивной силой. Затем карта готова к записи, трек за треком, например, начиная с трека 1 и заканчивая треком 3.

Использование программного обеспечения
Я разработал экспериментальную программу C для Linux для записи карточек. Инструкции по компиляции включены внутри. Конечно, вы можете разработать свою собственную программу для записи данных, например, с использованием Windows, но, пожалуйста, не просите меня сделать это. Если у вас нет и вы не хотите устанавливать Linux (вы не знаете, что вам не хватает ;-), у вас все еще есть выбор: запустить Linux на компакт-диске и использовать мои программы, см. мою страницу с Linux без его установки.

Есть несколько вещей, которые вы должны настроить перед компиляцией программы, все они находятся в начале кода. Один из них - данные о порте, по умолчанию он использует выводы RTS, DTR и DSR последовательного порта COM1. Есть и другие вещи, которые вы можете настроить (подробности см. В источнике, это не требует пояснений), для которых вы можете оставить значения по умолчанию, но вы должны ввести точное значение расстояния между вашими двумя датчиками (макрос DIST). В противном случае оценка скорости наверняка будет неправильной, следовательно, плотность записи будет недостаточной, и программное обеспечение не сможет обнаружить ошибку.

Оба датчика не могут находиться слишком близко друг к другу. Расстояние должно быть таким, чтобы его можно было легко измерить с точностью до миллиметра и чтобы можно было надежно измерить скорость с учетом временного разрешения ПК. Больше полсантиметра должно быть нормально. Один из датчиков (последний) и магнитная дорожка (или магнитная головка, в зависимости от вашего стиля проведения) должны быть размещены рядом. Таким образом, когда активируется последний датчик, программа начнет посылать ведущие биты тактирования, и они будут прибывать на магнитную головку вовремя, чтобы быть записанными на магнитной полосе. Настройка параметра количества ведущих битов синхронизации поможет записать данные в нужное место на магнитной полосе.

После того, как вы скомпилировали программу C, подключите магнитную головку и датчики к последовательному порту, тогда вам просто нужно запустить программу и провести карту. Программа должна запускаться от имени пользователя root, чтобы получить доступ к последовательному порту и работать с приоритетом в реальном времени. Требуется запуск с наивысшим приоритетом, чтобы гарантировать правильную синхронизацию сигналов данных, поэтому вы можете заметить, что компьютер зависает при запуске программы; это нормально, при выходе из программы он перейдет в нормальное состояние. При запуске программа ждет активности сенсоров, то есть считывания карты. Если в течение периода ожидания не обнаружено никакой активности, программа завершает работу, ничего не делая. Если обнаружено считывание карты, программа начинает отправлять данные для записи со скоростью в соответствии с типом записываемой дорожки и скоростью обнаруженного считывания. Как упоминалось выше, вам понадобится метод проб и ошибок, чтобы настроить некоторые параметры программы, в основном количество начальных битов синхронизации, чтобы записываемые данные идеально располагались внутри магнитной полосы и имели надлежащую номинальную плотность.

Программа принимает следующие варианты:
  • -t <track>: Тип дорожки для записи, допустимые значения от 1 до 3, соответствующие трем стандартным дорожкам. Значение по умолчанию - дорожка 2. Эта опция выбирает несколько параметров, соответствующих каждой дорожке.
  • -c <clk_bits>: количество ведущих битов синхронизации, значение по умолчанию зависит от выбранной дорожки. Это количество начальных нулей (или единиц, если задана опция -i, см. Ниже), которые отправляются для записи перед фактическими данными. Настройка этого параметра помогает синхронизировать данные на магнитной полосе.
  • -f <файл>: имя (включая необязательный путь) файла с данными для записи, значение по умолчанию - «Writetrack.dat». Формат должен быть одной строкой со строкой битов (фактически байты 0 и 1) или байтами (от 0 до 9, от A до Z и остальные символы из кодировки ANSI / ISO ALPHA). Программа автоматически определит формат. Если необходимо, вы должны указать начальную и конечную сигнализацию. Символ LRC может быть включен или нет. У вас есть возможность добавить его автоматически (см. Ниже).
  • -l: вычислить и добавить символ LRC к строке данных. Используется только в том случае, если вы не включили его во входные данные.
  • -1: биты 1 - это только одно изменение направления потока. Этот параметр имеет место при записи строки входных данных, поэтому, если вы предоставляете строку данных в битовом формате, вы всегда должны использовать только один 1 байт для представления логики 1. Программа по умолчанию записывает два коротких реверсирования потока для представления 1, если только вы используете эту опцию, и в этом случае будет использоваться только одно короткое реверсирование потока.
  • -i: инверсные биты синхронизации, они будут равны 1, а не 0. Я обнаружил это нестандартное поведение по крайней мере в одном типе карт - билетах в метро Мадрида.
После того, как программа закончит запись дорожки, она отобразит некоторую информацию, которая может быть использована для определения качества смахивания. На самом деле программа предупреждает, если измеренная скорость свайпа вышла за пределы диапазона, который считается хорошим согласно моим экспериментам.

Перспективы
Как упоминалось выше, я смог писать, стирать и перезаписывать карты с высокой коэрцитивной силой с помощью настроек, инструментов и процедур, приведенных в этом документе. Я мог записывать треки как с низкой, так и с высокой плотностью, однако я не мог успешно читать треки с высокой плотностью записи, которые я написал. Тем не менее, я смог успешно прочитать написанные мной треки с низкой плотностью записи, тем самым доказав, что общая процедура верна.

Чтобы исследовать проблему с дорожками высокой плотности, я прочитал их и посмотрел сигнал графически. Профиль выглядел вполне приемлемо и его можно было расшифровать на глаз. Это означает, что, возможно, программа для чтения карт более сложная, чем моя, могла бы успешно декодировать эти дорожки с высокой плотностью записи. В любом случае профиль предполагал, что присутствовали некоторые искажения, возможно, как если бы высокочастотные сигналы были демпфированы, или если некоторые высокочастотные компоненты были искусственно добавлены, возможно, из-за сбоев, возникающих при переключении линии последовательного порта.

Чтобы проверить эту гипотезу, я начал играть с простыми RC-фильтрами нижних, верхних и полосовых частот, но меня отвлекли другие предметы, прежде чем я смог прийти к какому-либо выводу. Так что решать вам. Может быть, добавление какого-то фильтра решает проблему, или, может быть, вообще нет проблем с оборудованием, может быть, это просто вопрос настройки программного обеспечения и практики ручного смахивания. Должен признать, что я не уделял слишком много времени тестированию записи дорожек с высокой плотностью записи и последующему тесту считывания. Может, мне не хватило терпения! :-)

Удачи, если вы попробуете, и, пожалуйста, держите меня в курсе ваших успехов.
 
Top