I have spent the past few days implementing support for the AMD Am79C971, in the family of AMD Lance network controllers. Please see attached source code.
So far, testing with SST39SF020A memory has shown positive results for reading flash memory. However, erasure and writing fails now and then, often with just one or two bytes being erroneous. Sometimes it fails with “magic data” being written, sometimes with random data at random locations. Please see the attached log for a full example failure.
"Verifying flash... FAILED at 0x00005555! Expected=0xef, Found=0xaa, failed byte count from 0x00000000-0x0003ffff: 0x1" "Verifying flash... FAILED at 0x000008b9! Expected=0x00, Found=0xb9, failed byte count from 0x00000000-0x0003ffff: 0x1" "Verifying flash... FAILED at 0x0001fd86! Expected=0x86, Found=0x85, failed byte count from 0x00000000-0x0003ffff: 0x1"
I have never worked with PCI devices nor flash memory before, and I would really appreciate some ideas of where to start poking around to fix the erasure and writing issues. Also, comments on the code is highly appreciated!
The datasheet for the network controller can be found here: https://datasheet.octopart.com/AM79C971AKC-W-AMD-datasheet-5389196.pdf
Kind regards, Alexander Lundén