Это сводит меня с ума уже пару дней, так что, может быть, вы, ребята, дадите мне некоторое представление о том, что происходит не так.
Я пытаюсь прочитать некоторые данные из EEPROM (24LC16B
) с помощью STM32 (F0), но это мне просто не позволяет. Я пробовал Arduino, который работал и все еще работает, поэтому я знаю, что проводка правильная.
Это моя функция для чтения данных EEPROM. (Он сокращен до самой основы, просто для тестирования): (Pastebin моей функции I2C_setup)
uint16_t readEEPROMData(uint16_t deviceAddress, int memAddress){
// Wait while I2C peripheral is not ready
I2C_WaitForFlag(I2C_ISR_BUSY);
// Start I2C write transfer for 2 bytes, do not end transfer (SoftEnd_Mode)
I2C_TransferHandling(I2C1, 0xA2, 2, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);
I2C_WaitForFlag(I2C_ISR_TXIS);
// For testing purpose, be sure to generate a stop command...
I2C_TransferHandling(I2C1, 0xA2, 0, I2C_AutoEnd_Mode, I2C_Generate_Stop);
return I2C_COMM_STATUS;
}
Вот вставка библиотеки Arduino, которую я использовал.
Я использовал логический анализатор, чтобы посмотреть, как происходит общение, и теперь я действительно этого не понимаю. Вот экран для печати рабочей версии Arduino:
А вот экран для печати связи STM32:
Экспорт анализатора логики (доступен для просмотра с помощью Saleae Logic)
Как видите, я использую тот же адрес (хотя мне пришлось использовать 0xA2 с STM32), и никаких странных вещей, кроме NACK
, не происходит. Так что же могло быть не так?
.5 μ
для SDA и SCL. Между каждой попыткой есть задержка в 0,12 с, так что это не должно быть проблемой? - person Mathlight   schedule 04.01.2018ACK
вместо всехNACK
. Так что я тоже думаю, что это так. Я попробую приклеить провода и посмотреть, как это получится, но если бы вы могли дать ответ по этим пунктам (особенно последнему), это было бы здорово. - person Mathlight   schedule 04.01.2018