Проблема с EEPROM 25LC1024 на плате PIC32MX OLIMEX

Я пытаюсь прочитать регистр состояния для EEPROM, следуя инструкциям в этих указаниях по применению. Я хотел узнать мнение сообщества о сигналах, которые я получаю. Мне они не кажутся нормальными.

http://ww1.microchip.com/downloads/en/AppNotes/01073A.pdf

Схема подключения: я использую точно такую ​​же распиновку, рекомендованную в примечаниях по применению.

Когда я читаю MISO, я получаю странное поведение.Выход EEPROM

Сигналы MOSI и CS:

Я получаю сигнал MOSI, как и ожидалось, на переднем фронте.Вход в EEPROM

Синхронизация Chip Select с часами

Я настраиваю часы так, чтобы они тикали на частоте 1 МГц.

Код инициализации SPI и рабочий код в файле main.c. (из eewiki, адаптировано под мои нужды)

#define eepromCS LATBbits.LATB15
void initSPI(void)
{
// Add GPIO config on pin RB15
eepromCS = 1; //GND


IEC0bits.SPI1EIE = 0;
IEC0bits.SPI1RXIE = 0;
IEC0bits.SPI1TXIE = 0;


SPI2CONbits.ON = 0;

SPI2BUF = 0;

SPI2BRG = 0; // 1MHZ

SPI2STATbits.SPIROV = 0;

/* SPI2CON Settings */
SPI2CONbits.FRMEN = 0;
SPI2CONbits.SIDL = 0;
SPI2CONbits.DISSDO = 0;

// 8 bits !
SPI2CONbits.MODE16 = 0;
SPI2CONbits.MODE32 = 0;

SPI2CONbits.CKP = 0; // Active state is high
SPI2CONbits.CKE = 0; // sampling from idle to active
SPI2CONbits.SSEN = 0;
SPI2CONbits.MSTEN = 1;
SPI2CONbits.SMP = 0; // sample during transmission

SPI2CONbits.ON = 1;
}

int main(void)
{
TRISBbits.TRISB15 = 0;
CSEEPROM = 1; 


initSPI(); //EEPROM as a slave
unsigned char status;
unsigned char tmp;

//First READ
while (!SPI2STATbits.SPITBE);
eepromCS = 0;
SPI2BUF = 0x05;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
SPI2BUF = 0;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
eepromCS = 1;
write_char(status);


//Enable write LATCH
while (!SPI2STATbits.SPITBE);
eepromCS = 0;
SPI2BUF = 0x06;
while (!SPI2STATbits.SPIRBF);
tmp = SPI2BUF;
eepromCS = 1;


//Read Status register
while (!SPI2STATbits.SPITBE);
eepromCS = 0;
SPI2BUF = 0x05;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
SPI2BUF = 0;
while (!SPI2STATbits.SPIRBF);
status = SPI2BUF;
eepromCS = 1;
//write_char(status);

while (42);
return 0;
}

Я сделал скриншоты только для двух последних операций (запись включения защелки и чтение из регистра состояния). У меня точно такие же сигналы, когда я читаю регистр состояния перед тем, как отправить команду записи защелки.

Я использую макетную плату PIC32MX Olimex, ниже документация по прототипу и таблица данных EEPROM.

https://www.olimex.com/Products/PIC/Proto/PIC-32MX/resources/PIC-32MX.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/22064B.pdf

Как обычно дьявол кроется в деталях, было бы здорово, если бы я мог по-новому взглянуть на свою проблему. Может быть, я что-то пропустил.

Спасибо за помощь !

PS: увеличение скорости до 20 МГц делает сигнал плоским, но не решает мою проблему.

Ответы (1)

Это не похоже на что-то связанное с кодом. Это выглядит либо как контакт, закороченный на другой выходной контакт, который установлен на ноль (или как другой ведомый, не выполняющий три состояния MISO). Отключите микросхему памяти, установите PIC MISO на вывод и попробуйте переключить, записав 1 и 0 в соответствующий бит порта.

Еще одним подозреваемым является питание микросхемы памяти. Убедитесь, что он получает VCC и имеет конденсатор от VCC до земли.

Спасибо за ваш ответ. Я пробовал ваши решения, и это не работает. Я сделал несколько тестов с мультиметром и обнаружил нечто ужасное. Ток не поступает в EEPROM. У меня на самом деле их 2, надеюсь, я не закоротил их обоих. У меня есть генератор на 5 В, и я проверяю ток с помощью мультиметра. Он остается @ 0 мкА Любая подсказка относительно того, как я могу его отладить? Я пробовал и другие схемы, и я получаю тот же результат
Если чип не поврежден, вы не сможете увидеть ток в этом чипе с помощью мультиметра. Вы пытались переключить MISO, как было предложено?
Я попытался включить RG7, как было предложено, и получил правильную строку вывода. Я даже пробовал менять макетную плату, и ничего не происходит. Это должно быть что-то маленькое. Я должен начать все сначала
Я хотел бы отметить, что я пытался получить рабочий ток в мультиметре, я не понимаю, почему я не смогу увидеть ток? В даташите написано, что в режиме ожидания я получу от 12 до 20 мкА imgur.com/a/bu4lNd8 –