Указатели и EEPROM 24c16 + stm32
04.01.2018, 17:47
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
Предлагаю для начала выкинуть отправку старшего байта address (подчеркнутая строка), коли уж оно само его умеет слать... И количество отправляемых байт, соответственно, уменьшить на единицу.
А когда она перестанет зависать, заняться чтением, в котором тоже явно наворочено не того (посылка байта до выставления START, и т.д. тоже присутствует)...
Последний раз редактировалось AR_Favorit; 04.01.2018 в 18:05.
|
|
|
|
04.01.2018, 18:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
Запись оставил пока так. В режиме отладки всё уходит правильно.
|
PHP код:
|
void eeprom_pagewrite(uint16_t address, uint8_t *buf,uint8_t nbytes)
{
uint8_t index=0;
I2C1-›CR2 = I2C_CR2_AUTOEND | ((2+nbytes)‹‹16) | (EEPROM_OWN_ADDRESS‹‹1);
/* Check Tx empty */
while (!(I2C1-›ISR & I2C_ISR_TXE) );
I2C1-›TXDR =(uint8_t) (address››8); /* Byte to send */
I2C1-›CR2 |= I2C_CR2_START; /* Go */
while (!(I2C1-›ISR & I2C_ISR_TXIS) );
I2C1-›TXDR = (uint8_t)(address &0x00FFB); /* yte to send */
for(index=0;index‹nbytes;index++)
{
I2C1-›TXDR = buf[index] ; /* Byte to send */
while ( (!(I2C1-›ISR & I2C_ISR_TXE)) ) {};
// Delay_ms(10);
}
}
|
А вот с чтением воюю.
Функцию пока страшную не буду выкладывать дабы вообще не заплевали ))) Но там было кучу нетого что надо. Сейчас ри чтении отправляет адрес за две посылки, потом в for(index=0;index‹nbytes;index++) ничего не получает в I2C1-›RXDR. Я сделал чтение повторно(функцию чтения 2 раза подряд написал) и при втором входе в функцию после первой отправки адреса сразу в I2C1-›RXDR приходит то что надо.... Смотрю в даташите порядок чтения - пока не получается сообразить.... Золотая вещь отладка в стм....
|
|
|
|
04.01.2018, 19:19
|
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
Запускай ногодрыгом и не мучайся. Не стоит оно того.
|
|
|
|
04.01.2018, 19:57
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
ногодрыгом тож надо разбираться )) Я уже гдето близко )) Немогу понять почему после второй посылки адреса откуда читать из памяти еепромки сразу летят подряд байты... Пока происходит вход в цикл for уже 3 байта прилетает и он успевает записать в буфер только последний четвертый.... Мне этот код гдето тут дали на форуме. Но до конца он был не сделан )) Надо доделать...
|
|
|
|
04.01.2018, 19:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
вспомнил что есть анализатор у меня... Ща его подключу и посмотрю что да как происходит...
|
|
|
|
04.01.2018, 20:30
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
В даташите если я правильно понимаю надо слать 8-битный адрес памяти ячейки из которой я хочу считать значение? Я шлю 16-битный адрес куда хочю записать данные так же и при чтении из еепром. Наверно надо 8-битный слать? В даташите 8-бит на картинке....
|
|
|
|
04.01.2018, 22:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
Сообщение от miwutka
|
|
В даташите если я правильно понимаю надо слать 8-битный адрес памяти ячейки из которой я хочу считать значение? Я шлю 16-битный адрес куда хочю записать данные так же и при чтении из еепром.
|
Старт, старший байт адреса (девайс_ид+признак записи), младший байт, еще раз старт, старший байт (девайс_ид+признак чтения), полетели читаемые байты.
F0 сам отправляет старший байт (учитываем это и не забываем младший бит в нем менять, для записи 0, для чтения 1)...
|
|
|
|
04.01.2018, 22:58
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
В процедуре записи выкиньте I2C1-›TXDR =(uint8_t) (address››8 ); /* Byte to send */ перед отправкой START. Она там не срабатывет и не нужна.
Для чего я датаграмму из даташита привел? никаких записей в TXDR до выставления START.
|
|
|
|
Сказали "Спасибо" AR_Favorit
|
|
|
04.01.2018, 23:01
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 13.03.2010
Сообщений: 2,896
Сказал спасибо: 498
Сказали Спасибо 3,061 раз(а) в 1,425 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
Сообщение от Easyrider83
|
|
Запускай ногодрыгом и не мучайся. Не стоит оно того.
|
В данном случае (F0 и EEPROM) вполне себе стоит, ИМХО.
|
|
|
|
04.01.2018, 23:42
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Указатели и EEPROM 24c16 + stm32
у меня еще дисплей олед 1306 на шине. Ногодрыг не катит...
Добавил процесс записи. Убрал строку которую написали убрать. Вроде всё красиво по записи...?
И в нулевой адрес пишет и в 4-тый. Запись проходит норм... С диаграммой не очень подружился...
Ща буду пытаться...
Последний раз редактировалось miwutka; 04.01.2018 в 23:52.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:53.
|
|