I'm building a FDD controller out of a $10 microcontroller. It's mostly working pretty well, and I can read both 720kB and 1440kB PC MFM disks (the only ones I have to test with).
However... if I read a 720kB disk, then change disks to a 1440kB disk and try to read that, I get weird sporadic data dropouts in the pulse stream from the drive --- I mean, long sequences where I get no pulses at all. (And, very occasionally, sometimes no data shows up at all; READ DATA remains at 5V for the duration of the track.) I can detect these and retry and mostly they go away:
Track 68 side 0: 179 ms in 75904 bytes, 1 dropouts
Track 68 side 1: 179 ms in 75904 bytes, 1 dropouts
Track 69 side 0: 180 ms in 75904 bytes, 1 dropouts
Track 69 side 1: 84 data dropouts, retrying
Track 69 side 1: 179 ms in 75840 bytes, 0 dropouts
Track 70 side 0: 179 ms in 75904 bytes, 1 dropouts
Track 70 side 1: 179 ms in 75904 bytes, 0 dropouts
Track 71 side 0: 200 data dropouts, retrying
Track 71 side 0: 90 data dropouts, retrying
Track 71 side 0: 179 ms in 75904 bytes, 0 dropouts
Track 71 side 1: 180 ms in 75904 bytes, 0 dropouts
This only happens the first couple of reads after changing disks. If I leave a 1.44MB disk in the drive for a while, the drive seems quite happy and I get reliable data.
The fact that these go away on retry indicates that it's not anything to do with the disk at all, and I'm nervous that there's some sort of calibration after media change which I should be doing but aren't. Some of my data sheets (e.g. https://hxc2001.com/download/datasheet/floppy/thirdparty/Teac/TEAC%20FD-05HF-8830.pdf) mention autocalibration but don't actually explain what this is...
What I'm doing on disk change is a standard homing sequence, where I seek back to track 0, then I seek one more step (as one of my data sheets suggested that seeking to track -1 was necessary to reset the DISK CHANGE line), and then I seek to the track I want to read. I don't seek between retries. I always read a complete track at a time, from one index pulse to the next. I have generous delays at each stage.
I've played with the DENSITY SELECT line and it seems to make no difference --- I think my drive ignores it and figures it out automatically from the hole in the disk.
Is there anything obvious I'm missing here?