These larger Winbond chips (which I did not have available last time I worked on SerialFlash) have a special 32 bit versions of their commands, which work regardless of that config bit setting.
With that in mind, here's a very quick and dirty hack to try.
Find this:
Code:
if (f & FLAG_32BIT_ADDR) {
SPIPORT.transfer(0x03);
SPIPORT.transfer16(addr >> 16);
SPIPORT.transfer16(addr);
} else {
SPIPORT.transfer16(0x0300 | ((addr >> 16) & 255));
SPIPORT.transfer16(addr);
}
and change 0x03 to 0x13.
Then find this:
Code:
if (flags & FLAG_32BIT_ADDR) {
SPIPORT.transfer(0x02); // program page command
SPIPORT.transfer16(addr >> 16);
SPIPORT.transfer16(addr);
} else {
SPIPORT.transfer16(0x0200 | ((addr >> 16) & 255));
SPIPORT.transfer16(addr);
}
and change 0x02 to 0x12.
Finally, find this:
Code:
if (f & FLAG_32BIT_ADDR) {
SPIPORT.transfer(0xD8);
SPIPORT.transfer16(addr >> 16);
SPIPORT.transfer16(addr);
} else {
SPIPORT.transfer16(0xD800 | ((addr >> 16) & 255));
SPIPORT.transfer16(addr);
}
and change 0xD8 to 0xDC.
Do those edits make it work?