ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
2 июля
520969 Топик полностью
Argon (08.06.2014 12:32 - 13:36, просмотров: 97) ответил Лагунов на ??? По моему во всех I2C ЕЕПРОМ обязательно СТОП перед СТАРТ-чтения.
неа, даташиты на 24xx посмотрите, картинку с заголовком Random Read. По теме: в сети нашлось несколько примеров, где стоп не посылается (т.е. соответствует протоколу из даташитов 24xx) и авторы говорят, работает ок. вот мой кусок unsigned char byte_load(byte device, word addr) { byte out; byte block_addr = 0; //для устройств кроме 24LC16B block_addr равен 0. #ifdef EEPROM_24LC16B block_addr = (addr >> 7)&0x0e; #endif I2C_start(I2C1, (device + block_addr) & 0xFE, I2C_Direction_Transmitter); // start a transmission in Master transmitter mode #ifndef EEPROM_24LC16B if(device == EEPROM) //старший байт адреса передаем только для прочих { I2C_write(I2C1, (addr >> 8)&0xff); // write one byte to the slave } #endif //Отправляем младший байт адреса. Это одинаково для любых флэшек. I2C_write(I2C1, addr & 0xff ); // write another byte to the slave //адрес отправлен I2C_stop(I2C1); // stop the transmission. Согласно даташитам на 24xx это не требуется. но без этого стопа виснет i2c у stm32 I2C_start(I2C1, (device + block_addr) & 0xFE, I2C_Direction_Receiver); // start a transmission in Master receiver mode out = I2C_read_nack(I2C1); // read one byte and don't request another byte, stop transmission. Stop есть внутри ..._nack() return out; } P.S. I2C_write в конце имеет цикл ожидания нужного Eventа