MFM-кодирование


MFM-коди́рование (иногда в литературе встречаются названия «модифицированный код Миллера в квадрате», «МЧМ-кодирование»; англ. modified frequency modulation) — способ кодирования данных, один из способов физического кодирования (линейного кодирования, канального кодирования, цифрового кодирования, манипуляции сигнала). Служит для передачи цифровых данных от передатчика к приёмнику по последовательному интерфейсу. Является двуполярным двухуровневым (сигнал может принимать два значения, соответствующие низкому уровню и высокому уровню) кодом, в котором каждый информационный бит кодируется комбинацией из двух битов.

MFM-кодирование является модификацией частотной модуляции (англ. frequency modulation, FM). Применение MFM-кодирования при записи информации на гибкие диски позволяло увеличивать объём записываемой информации вдвое; такие диски назывались дисками двойной плотности («double density»). Для жёстких дисков вначале также использовалось MFM-кодирование, но вскоре был изобретён более эффективный метод кодирования информации RLL (run-length limited).

В случае с гибкими дисками новые методы уже не использовались в силу отсутствия необходимости в переносе больших объёмов данных на гибких дисках (это было бы недостаточно надёжно). Кроме того, в случае с гибкими дисками требуется совместимость новых стандартов кодирования и старых: любой современный дисковод может читать как FM-, так и MFM-кодированные диски, в то время как принцип RLL-кодирования принципиально отличается от двух предыдущих.

При MFM-кодировании изменение тока записи происходит в середине интервала (такта), если передаваемый бит равен 1, и на границе интервала, если оба соседних бита равны 0. Направление переключения тока не имеет значения.

Заметим, что тактовые биты, идущие до и после последовательности, иногда известны, а иногда требуют знания дополнительных бит данных. Более длинный пример (полужирным выделены биты данных, остальные — тактовые):

С целью синхронизации контроллера при считывании данных в начале блока данных записывается специальный маркер, представляющий собой шестнадцатеричный байт A1 (10100001), в котором положенное согласно протоколу переключение тока между двумя нулевыми битами (пятым и шестым) не производится.