01.10.2017, 21:53
|
|
Прописка
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
[РЕШЕНО]stm32f030 + eeprom
Добрый день, форумчане.
Необходимо организовать сохранение данных на внешнюю eeprom AT24C08D. Решил использовать аппаратный I2C, но память на посылку адреса постоянно отвечает NACK. Пока сделал отправку START и адреса памяти, но прерывания по совпадению адреса нет. По анализатору вижу, что память шлет NACK. По отладчику смотрел, то в статусном регистре подымаются флаги STOPF, NACKF и TXE. Подскажите, что я делаю не так...
Код:
|
void I2C_EE_Init(void)
{
// clock enable
RCC-›APB1ENR |= RCC_APB1ENR_I2C1EN;
RCC-›AHBENR |= RCC_AHBENR_GPIOBEN;
// set output alternate function open drain
GPIOB-›MODER &= ~(GPIO_MODER_MODER8 | GPIO_MODER_MODER9);
GPIOB-›MODER |= (GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1);
GPIOB-›OTYPER |= (GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9);
GPIOB-›OSPEEDR |= (GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9);
GPIOB-›PUPDR &= ~(GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9);
GPIOB-›AFR[1] |= ((0x01 ‹‹ GPIO_AFRH_AFSEL8_Pos) | (0x01 ‹‹ GPIO_AFRH_AFSEL9_Pos));
// set i2c
I2C1-›CR1 &= ~I2C_CR1_PE;
I2C1-›CR1 &= ~(I2C_CR1_ANFOFF | I2C_CR1_DNF); // disabled filters
I2C1-›TIMINGR = 0x20303E5D;
I2C1-›CR1 |= I2C_CR1_ADDRIE | I2C_CR1_TXIE | I2C_CR1_STOPIE | I2C_CR1_NACKIE;
I2C1-›CR1 |= I2C_CR1_PE;
NVIC_EnableIRQ(I2C1_IRQn);
}
//----------------------------------
void I2C_EE_Start(uint8_t addr)
{
I2C1-›CR2 &= ~I2C_CR2_ADD10; // addressing mode - 7 bit
I2C1-›CR2 &= ~I2C_CR2_RD_WRN; // data send
I2C1-›CR2 |= addr; // eeprom address
I2C1-›CR2 |= I2C_CR2_START; // start enable
} |
Адрес отсылаю 0xA0 как в даташит указано. Только не понятно из таблицы что за A8 и A9. На микросхеме есть только A2, который я подключил к земле.
Спасибо.
Последний раз редактировалось gruffi; 05.10.2017 в 11:31.
|
|
|
|
01.10.2017, 22:02
|
|
Прописка
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: stm32f030 + eeprom
Вот то что показывает анализатор
|
|
|
|
01.10.2017, 23:49
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: stm32f030 + eeprom
Тайминги I2C нормально настрой в TIMINGR
PS: A8/A9 это 2 старших бита адреса массива 8x1024, к которому ты обращаешься. Биты адреса A0-A7 идут в след байте. Как гр-ся, RTFM уже.
|
|
|
|
01.10.2017, 23:59
|
|
Прописка
Регистрация: 01.02.2012
Сообщений: 131
Сказал спасибо: 9
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
|
Re: stm32f030 + eeprom
Спасибо, попробую перенастроить. Настраивал тайминги через куб. Попробую без него.
|
|
|
|
02.10.2017, 01:12
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: stm32f030 + eeprom
Я как-то не смог понять, в чем смысл такого нагромождения I2c, если мы не гоняем гигабайты по DMA. У меня исправно работает софтовый ногодрыг в режиме мастера и по объему кода он вышел значительно выгоднее HAL.
|
|
|
|
02.10.2017, 01:19
|
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: stm32f030 + eeprom
Пруф в студию, или...
|
|
|
|
02.10.2017, 01:31
|
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: stm32f030 + eeprom
Сообщение от Easyrider83
|
У меня исправно работает софтовый ногодрыг
|
ниасилил шоль железку?)))
|
|
|
|
02.10.2017, 01:38
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: stm32f030 + eeprom
Может не было достаточно весомого стимула? Ногодрыг одинаково работает на любом железе. Под RTOS тоже все идеально работает. Не вижу смысла в hw i2c мастере.
|
|
|
|
02.10.2017, 01:43
|
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: stm32f030 + eeprom
уууу... дауншифтинг дытехтыд-ахтунгих
|
|
|
|
02.10.2017, 01:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.03.2010
Сообщений: 2,897
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: stm32f030 + eeprom
Сообщение от индюк
|
уууу... дауншифтинг дытехтыд-ахтунгих
|
Да лан нудеть-то. Даже замшелый повелитель пиков с 32-битным ником, старательно исходящий на говно, когда кто-то на стм32 светодиод зажигает без изъёпства с таймером и дма, и тот, помнится, когда шла речь о квадратной шине, таки выдавливал что-то про пухлую еррату и про то, что и ногодрыг иногда приемлем, а ты прям святее папы римского решил быть)
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:41.
|
|