Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту


 
Опции темы
Непрочитано 07.06.2018, 18:37  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,507
Сказал спасибо: 297
Сказали Спасибо 23 раз(а) в 18 сообщении(ях)
miwutka на пути к лучшему
Вопрос I2C на stm32f373 - ds1307 + at24c32

Добрый день. Использую заведомо рабочий код для чтения и записи в еепромку. На процах Ф0 работает. На 373 проце часы читаю без проблем, а еепромка постоянно читает 255. Сначала пишу в нужный адрес памяти потом пишу уже число. По анализатору всё уходит правильно. Два модуля ардуино проверил и одинаково не получается читать еепром. На 030 проце всё читается. Есть ли какие-то нюансы с I2C в 373 проце может кто знает??
Миниатюры:
Нажмите на изображение для увеличения
Название: 373-eep.jpg
Просмотров: 0
Размер:	64.7 Кб
ID:	129674  
Реклама:
miwutka вне форума  
Непрочитано 07.06.2018, 18:47  
индюк
Заблокирован
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 7,289
Сказал спасибо: 101
Сказали Спасибо 2,074 раз(а) в 1,253 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

частота шины какая?
индюк вне форума  
Непрочитано 07.06.2018, 18:50  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,507
Сказал спасибо: 297
Сказали Спасибо 23 раз(а) в 18 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

Сообщение от индюк Посмотреть сообщение
частота шины какая?
осликом смотрел - 380 кГц примерно. Я и на 100 и на 90 спускал. Часы работают, читаются а память чето нет... Брал запечатанную память для чтения и тоже самое...
miwutka вне форума  
Непрочитано 07.06.2018, 18:57  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,507
Сказал спасибо: 297
Сказали Спасибо 23 раз(а) в 18 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

Вот чтение и запись. EEPROM_OWN_ADDRESS 0x50

PHP код:
void eeprom_pagewrite(uint8_t addressuint8_t *buf,uint8_t nbytes)
{
   
uint8_t Count=0;    // Счётчик успешно принятых байт
   
I2C2->CR2 &= ~I2C_CR2_AUTOEND;
   
I2C2->CR2 &= ~I2C_CR2_RD_WRN;            // Режим передачи
    
I2C2->CR2 &= ~I2C_CR2_NBYTES;                // Очистить размер данных
    
I2C2->CR2 |= ((nbytes+1)<<16);    // Установить размер данных
    
I2C2->CR2 &= ~I2C_CR2_SADD;    // Очистить адрес ведомого устройства
    
I2C2->CR2 |= (EEPROM_OWN_ADDRESS<<1);            // Установить адрес ведомого устройства
    
I2C2->CR2 |= I2C_CR2_START;                    // Выдать старт на шину
    
while ((I2C2->ISR I2C_ISR_BUSY)==0) {};    // Ожидать выдачу старта
   // Сейчас либо I2C запросит первый байт для отправки,
    // Либо взлетит NACK-флаг, говорящий о том, что микросхема не отвечает.
    // Если взлетит NACK-флаг, отправку прекращаем.
    
while ((((I2C2->ISR I2C_ISR_TXIS)==0) && ((I2C2->ISR I2C_ISR_NACKF)==0)) && (I2C2->ISR I2C_ISR_BUSY)) {};
    if (
I2C2->ISR I2C_ISR_TXISI2C2->TXDR=address;    // Отправляю адрес регистра
   // Отправляем байты до тех пор, пока не взлетит TC-флаг.
    // Если взлетит NACK-флаг, отправку прекращаем.
    
while ((((I2C2->ISR I2C_ISR_TC)==0) && ((I2C2->ISR I2C_ISR_NACKF)==0)) && (I2C2->ISR I2C_ISR_BUSY))
    {
        if (
I2C2->ISR I2C_ISR_TXISI2C2->TXDR=*(buf++);    // Отправляю данныеCount++
    
}
   

//    //стоп
   
I2C2->CR2 |= I2C_CR2_STOP;                // Выдать стоп на шину
    
while (I2C1->ISR I2C_ISR_BUSY) {};        // Ожидать выдачу стопа
    // Очищаю флаги - необходимо для дальнейшей работы шины
    
I2C2->ICR |= I2C_ICR_STOPCF;        // STOP флаг
    
I2C2->ICR |= I2C_ICR_NACKCF;        // NACK флаг
    // Если есть ошибки на шине - очищаю флаги
    
if (I2C2->ISR & (I2C_ISR_ARLO I2C_ISR_BERR))
    {
        
I2C2->ICR |= I2C_ICR_ARLOCF;
        
I2C2->ICR |= I2C_ICR_BERRCF;
    }
}

void eeprom_pageread(uint8_t address,uint8_t *buf,uint8_t nbytes)
{
   
uint8_t Count=0;    // Счётчик успешно принятых байт
   
I2C2->CR2 &= ~I2C_CR2_AUTOEND;  //авто-СТОП отключаем
   
I2C2->CR2 &= ~I2C_CR2_RD_WRN;            // Режим передачи
    
I2C2->CR2 &= ~I2C_CR2_NBYTES;                // Очистить размер данных
    
I2C2->CR2 |= ((1)<<16);    // Установить размер данных
    
I2C2->CR2 &= ~I2C_CR2_SADD;    // Очистить адрес ведомого устройства
    
I2C2->CR2 |= (EEPROM_OWN_ADDRESS<<1);            // Установить адрес ведомого устройства
    
I2C2->CR2 |= I2C_CR2_START;                    // Выдать старт на шину
    
while ((I2C2->ISR I2C_ISR_BUSY)==0) {};    // Ожидать выдачу старта
      // Сейчас либо I2C запросит первый байт для отправки,
    // Либо взлетит NACK-флаг, говорящий о том, что микросхема не отвечает.
    // Если взлетит NACK-флаг, отправку прекращаем.
    
while ((((I2C2->ISR I2C_ISR_TC)==0) && ((I2C2->ISR I2C_ISR_NACKF)==0)) && (I2C2->ISR I2C_ISR_BUSY))
    {
        if (
I2C2->ISR I2C_ISR_TXISI2C2->TXDR address;    // Отправляю адрес регистра
    
}
   
// Повторный старт
   
I2C2->CR2 |= I2C_CR2_RD_WRN;    // Режим приёма
    
I2C2->CR2 &= ~I2C_CR2_NBYTES;                // Очистить размер данных
    
I2C2->CR2 |= ((nbytes)<<16);    // Установить размер данных
    
I2C2->CR2 &= ~I2C_CR2_SADD;    // Очистить адрес ведомого устройства
    
I2C2->CR2 |= (EEPROM_OWN_ADDRESS<<1);            // Установить адрес ведомого устройства
    
I2C2->CR2 |= I2C_CR2_START;                    // Выдать старт на шину
    
while ((I2C2->ISR I2C_ISR_BUSY)==0) {};    // Ожидать выдачу старта
      // Принимаем байты до тех пор, пока не взлетит TC-флаг.
    // Если взлетит NACK-флаг, приём прекращаем.
    
while ((((I2C2->ISR I2C_ISR_TC)==0) && ((I2C2->ISR I2C_ISR_NACKF)==0)) && (I2C2->ISR I2C_ISR_BUSY))
    {
        if (
I2C2->ISR I2C_ISR_RXNE) *(buf++) = I2C2->RXDR;    // Принимаю данныеCount++
    
}
//   //стоп
   
I2C2->CR2 |= I2C_CR2_STOP;                // Выдать стоп на шину
    
while (I2C2->ISR I2C_ISR_BUSY) {};        // Ожидать выдачу стопа
    // Очищаю флаги - необходимо для дальнейшей работы шины
    
I2C2->ICR |= I2C_ICR_STOPCF;        // STOP флаг
    
I2C2->ICR |= I2C_ICR_NACKCF;        // NACK флаг
    // Если есть ошибки на шине - очищаю флаги
    
if (I2C2->ISR & (I2C_ISR_ARLO I2C_ISR_BERR))
    {
        
I2C2->ICR |= I2C_ICR_ARLOCF;
        
I2C2->ICR |= I2C_ICR_BERRCF;
    }
   


miwutka вне форума  
Непрочитано 07.06.2018, 19:07  
индюк
Заблокирован
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 7,289
Сказал спасибо: 101
Сказали Спасибо 2,074 раз(а) в 1,253 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

ох мать....

у меня запись умещается в 5 строк.
и чтение тоже
индюк вне форума  
Непрочитано 07.06.2018, 19:17  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,507
Сказал спасибо: 297
Сказали Спасибо 23 раз(а) в 18 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

ну когда была только память то было чуток строк. Но когда стало ЛЭД-дисплей, часы и еепромка то оно всё глючило и пришлось всё вот так определять ))
miwutka вне форума  
Непрочитано 08.06.2018, 12:44  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,507
Сказал спасибо: 297
Сказали Спасибо 23 раз(а) в 18 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

я так понимаю что должно было всё работать? Придется на SPI видимо цеплять еепромку другую... Посоветуйте плиз какие можно использовать?
miwutka вне форума  
Непрочитано 08.06.2018, 12:58  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 11,660
Сказал спасибо: 1,013
Сказали Спасибо 3,785 раз(а) в 2,080 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

да залепи ты i2c на GPIO. Какая разница-то? Все равно ни DMA, ни прерывания не используются. Данные передаются короткими пакетами. Нет вообще никакого смысла городить все это на периферии.
Easyrider83 вне форума  
Непрочитано 08.06.2018, 16:49  
CERGEI1982
Почётный гражданин KAZUS.RU
 
Аватар для CERGEI1982
 
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,926
Сказал спасибо: 373
Сказали Спасибо 289 раз(а) в 172 сообщении(ях)
CERGEI1982 на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

Сообщение от Easyrider83 Посмотреть сообщение
да залепи ты i2c на GPIO. Какая разница-то? Все равно ни DMA, ни прерывания не используются. Данные передаются короткими пакетами. Нет вообще никакого смысла городить все это на периферии.
Того же мнения,тут меня немного обругали за то что spi софтовно сделал http://mcu.goodboard.ru/viewtopic.php?id=139
http://mcu.goodboard.ru/viewtopic.php?id=143

Нафига вообще эта ds1307 , когда с ds3231 проблем вообще не знаю.
__________________
Глаза боятся,а руки делают.
CERGEI1982 вне форума  
Непрочитано 08.06.2018, 17:36  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,512
Сказал спасибо: 86
Сказали Спасибо 612 раз(а) в 427 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: I2C на stm32f373 - ds1307 + at24c32

Сообщение от CERGEI1982 Посмотреть сообщение
тут меня немного обругали
И правильно, что обругали! Абдуринщики тусят на своем форуме и к людям не лезут!!!
Зачем делать софтово то, что есть аппаратно? Лень почитать RM с даташитом?
__________________
https://github.com/eddyem/
http://stackexchange.com/users/2227375/eddy-em
http://eddy-em.livejournal.com/
In the world, only two things are the worst: Windows and Poettering.
eddy на форуме  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AT24C32 + STM32F030F4 miwutka ARM 44 15.09.2016 09:01
Не работает I2C в ATMega128 pifa AVR 1 05.09.2014 19:45
Atmega, i2c и CodeVision deeman30rus AVR 3 21.01.2013 15:48
Проблема в организации I2C между ds1307 и pic16f1826 serjgorel Микроконтроллеры, АЦП, память и т.д 16 09.04.2012 21:50
VS1307 и DS1307 sergx1300 Микроконтроллеры, АЦП, память и т.д 3 02.06.2011 13:26


Часовой пояс GMT +4, время: 17:55.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot