MFM-kodning (nogle gange i litteraturen er der navne "modificeret Miller-kode i en firkant", "MFM-kodning"; engelsk modificeret frekvensmodulation ) - en metode til kodning af data, en af metoderne til fysisk kodning (linjekodning, kanalkodning, digital kodning, nøglesignal ). Bruges til at overføre digitale data fra en sender til en modtager via et serielt interface . Det er en bipolær to-niveau kode (et signal kan tage to værdier svarende til et lavt niveau og et højt niveau) kode, hvor hver informationsbit er kodet af en kombination af to bits.
MFM-kodning er en modifikation af frekvensmodulation ( eng. frequency modulation , FM). For disketter fordoblede brugen af MFM mængden af optaget information, sådanne disketter blev kaldt dobbeltdensitetsdiske (" double density "). MFM-kodning bruges i magnetiske diskdrev. Til harddiske blev MFM også brugt i starten, men en mere effektiv metode til kodning af information RLL ( run-length limited ) blev snart opfundet.
I tilfælde af disketter blev de nye metoder ikke længere brugt på grund af manglen på behovet for at overføre store mængder data på disketter (dette ville ikke være pålideligt nok). I tilfælde af disketter kræves derudover kompatibilitet af nye kodningsstandarder med gamle: ethvert moderne drev kan læse både FM- og MFM-kodede diske, mens princippet om RLL-kodning er fundamentalt forskelligt fra de to foregående.
Med MFM-kodning sker der en ændring i optagestrømmen midt i intervallet (uret), hvis den transmitterede bit er 1, og ved kanten af intervallet, hvis begge tilstødende bits er 0. Retningen af strømskifte har ingen betydning.
Data | … 0 0 … | … 0 1 … | … 1 0 … | … 1 1 … |
---|---|---|---|---|
Ur bits | … ? en ? … | … ? 0 0 … | … 0 0 ? … | … 0 0 0 … |
MFM kode | … ? 0 1 0 ? … | … ? 0 0 1 0 … | … 0 1 0 0 ? … | … 0 1 0 1 0 … |
Bemærk, at clock-bits før og efter sekvensen nogle gange er kendte og nogle gange kræver viden om yderligere databits. Længere eksempel (databit med fed skrift, clock-bit med fed skrift):
Data: 0 0 0 1 1 0 1 1 Ur: ? 1 1 0 0 0 0 0 0 Koden: ? 0 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0For at synkronisere controlleren, ved læsning af data, skrives der i begyndelsen af datablokken en speciel markør, som er en hexadecimal byte A1( 10100001), hvori den aktuelle skiftning mellem to nulbit (femte og sjette) indstilles iflg. protokollen udføres ikke.
Ordningsnummer 1 2 3 4 5 6 7 8 Data: 1 0 1 0 0 0 0 1 ? Dataur: ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ Signalniveau: ‾‾|_______|‾‾‾‾‾|_______|‾‾‾‾‾|___?... Synchrobeat: ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ Der er ingen skift i denne cyklus ^Sekvensen af signalniveauer opnået på denne måde (4 halve cyklusser af et niveau - 3 halve cyklusser af et andet - 4 halve cyklusser af det indledende niveau - 3 halve cyklusser af et andet), på den ene side, modsiger ikke betingelsen krævet af protokollen ("signalniveauet kan forblive uændret i højst 4 halve cyklusser"), og på den anden side forekommer det aldrig i en strøm af normale skrevne data (hvor signalet svarende til denne bit sekvensen skal se ud som 4-3-2-2-3). Opgaven lettes yderligere af, at flere sådanne markørsekvenser er placeret efter hinanden, i hvilket tilfælde den bit, der er markeret med et spørgsmålstegn, er kendt og lig med 1. For således at detektere markøren i den indkommende omskifterstrøm, er nok til at spore flere gentagelser af sekvensen af varighed 4-3- 4-3-2 uden at skulle parse de enkelte bits.