Простейший пишущий магнитную полосу

Tomcat

Professional
Messages
2,686
Reputation
10
Reaction score
744
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 <дорожка>: тип записываемой дорожки, допустимые значения от 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