Estoy intentando adjuntar Winbond W25Q16DVSIG a Atmega 1284P-PU. He conectado el bus SPI según el pinout, el pin CS tiene una resistencia de pull-up de 10K.
Cuando intento realizar alguna operación, el chip no responde. Escribí un código muy simple para poder probar la lectura del ID del fabricante / dispositivo usando la instrucción 90h según la hoja de datos página 52
Básicamente, requiere enviar cuatro bytes, uno con la instrucción 90h seguido de una dirección de 24 bits (todo cero).
Cuando intento obtener una respuesta, siempre obtengo ceros (dos bytes).
El código es muy simple y se ve así
byte data [4];
data[0] = 0x90;
data[1] = 0x00;
data[2] = 0x00;
data[3] = 0x00;
digitalWrite(FLASH_CS, LOW);
SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));
SPI.transfer(data, 4);
byte data1 = SPI.transfer(0x00);
byte data2 = SPI.transfer(0x00);
SPI.endTransaction();
digitalWrite(FLASH_CS, HIGH);
He comprobado la transferencia con LA, y parece que el chip no responde en absoluto (hay algunos dos picos extraños). Se parece a esto:
HehecholomismoparaWinbondW25Q16BVSIGyestáfuncionandobien.Recibounarespuestaadecuadaylatransmisiónseveasí:
¿Qué estoy haciendo mal aquí? ¿Hay algo que me falta en la hoja de datos? SPI Clock es demasiado lento?
El cableado es el mismo para ambos chips. Desafortunadamente, no tengo ningún programador para verificar el chip flash directamente.