Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с внешней eeprom по i2c
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 04:04:27

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Работа с внешней eeprom по i2c
СообщениеДобавлено: Вт окт 24, 2017 21:21:12 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 0
Собственно, сабж.
Процессор - Atmega8. Пока что тактируется от внутренней RC-цепочки.
В эмуляторе работает, а в железяке совсем не хочет

Код:

#define EEPROM_BUS_ADDRESS 0xA0

unsigned char eep_read(unsigned char address1, unsigned char address2) {
unsigned char data;                    //переменна¤ дл¤ прочитаных данных
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address1);
i2c_write(address2);                    //посылаем в шину адрес читаемой ¤чейки
i2c_start();                           //снова посылаем "старт" в шину
i2c_write(EEPROM_BUS_ADDRESS | 1);     //незнаю зачем но без этого не работает
data=i2c_read(0);                      //принимаем данные с лини и сохран¤ем в переменную
i2c_stop();                            //посылаем команду "стоп"
return data;                           //возврощаем значение прочитаного
}


void eep_write(unsigned char address1, unsigned char address2, unsigned char data) {   
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address1);
i2c_write(address2);                    //посылаем в шину адрес записываемой ¤чейки
i2c_write(data);                       //посылаем данные дл¤ записи
i2c_stop();                         //посылаем команду "стоп"
}


Код:
eep_write(0x00,0x03,0x00);
readbyte=eep_read(0x00,0x03);
lcd_gotoxy(0,1);
lcd_putchar(readbyte);


Выводит он мне FF на экран, т.е. полностью залитый квадратик.
Флешку использую at24c16, WP,A0-A3 на массе.
Подскажите, люди умные

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 09:02:09 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 0
На второй день родилась догадка-вопрос.
По даташиту память 16к не имеет адресующих пинов, адрес всегда будет A0.
Изображение

Но, есть пины, отвечающие за адрес в памяти, так?
А как они влияют, я понять пока не смог. Значение этих пинов влияет как-то на адрес ячейки?
Если они все замкнуты на землю (==0), то как это повлияет на адрес?

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 13:38:31 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2693
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вы откуда такую картинку взяли? :dont_know: Я такую в ДШ не видел.
В ДШ есть пункт что после сброса нужна сделать функцию инициализации. Возможно оно не важно, но лучше соблюсти протокол чтобы потом не думать.

Код:
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address1);
i2c_write(address2);
Эти функции посылают три байта? Но ДШ говорит что адресуется данная память двумя байтами. В которые входят 4 бита идентификатора и бит-атрибут записи/чтения.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 14:40:45 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 0
Z_h_e писал(а):
Вы откуда такую картинку взяли? :dont_know: Я такую в ДШ не видел.

вот тут вот: http://www.atmel.com/Images/doc3256.pdf

Z_h_e писал(а):
]Эти функции посылают три байта? Но ДШ говорит что адресуется данная память двумя байтами. В которые входят 4 бита идентификатора и бит-атрибут записи/чтения.


Действительно, что-то я не так делаю... Если верить диаграмме в даташите,то должно быть так:

Код:
void eep_write(unsigned char address1, unsigned char address2, unsigned char data) {   
i2c_start();                           //посылаем команду "старт" в шину i2c
i2c_write(EEPROM_BUS_ADDRESS);         //посылаем в шину адрес устройства
i2c_write(address1);//адрес ячейки
i2c_write(data);                       //посылаем данные для записи
i2c_stop();                         //посылаем команду "стоп"
}

но так оно не работает в протеусе, продолжает не работать в железе, а еще я не понимаю как передавать адрес ячейки, когда он перевалит за 255?

Z_h_e писал(а):
после сброса нужна сделать функцию инициализации


Ткните, пожалуйста, носом. а то я похоже не понимаю, что есть инициализация

update: флешка 24C16N

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 15:11:57 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2693
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Сам сейчас долго искал где это я все увидел :shock: . Наконец то нашел с помощью истории браузера. Я не на тот чип поглядел ДШ, на 24с16D. Извиняюсь за путаницу.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 15:34:48 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14054
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Адрес ЕЕПРОМки (с нулями, если адресные выводы сидят "на корпусе") затем адрес ячейки, затем собственно данные.
Как это выглядит в библиотеках Си...
:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 15:54:29 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2693
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Но адресация происходит двумя байтами все равно.
WaL97 писал(а):
По даташиту память 16к не имеет адресующих пинов, адрес всегда будет A0.
Изображение
Биты P2 P1 P0 - это номер страницы памяти. Можете считать что это старшие биты адреса ячейки памяти. Я так понял, что для памяти 16Кбит, А2 A1 A0 не используются
Например Вам нужно записать по адресу 0x254 данные.
1. Формируете старт.
2. Отправляете девайс адрес. 0b10100100 - первые 4 бита идентификатор памяти, следующие 3 номер страницы 2, самый младший признак записи.
3. Отправляете адрес внутри страницы 0x54.
4. Отправляете данные.
5 Формируете стоп.
По хорошему надо контролировать ACK. Может Ваши функции уже это делают. :dont_know:

Изображение


Вложения:
W.png [10.09 KiB]
Скачиваний: 1100

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Последний раз редактировалось Z_h_e Ср окт 25, 2017 16:01:52, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 15:55:46 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
WaL97 писал(а):
я не понимаю как передавать адрес ячейки, когда он перевалит за 255?
unsigned short ? :roll:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 16:13:01 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2693
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
WaL97 писал(а):
как передавать адрес ячейки, когда он перевалит за 255?
С помощью P2 P1 P0

Добавлено after 9 minutes 38 seconds:
А вот вариант чтения.
Изображение
Обратите внимание, что при чтении данных в конце байта данных мастер формирует ACK. Если он равен 1, значит читать дальше не будет и затем формирует стоп.
Если надо читать сразу блок данных, то мастер после каждого прочтения байта данных формирует ACK=0, тем самым говорит что хочет еще данных.

Я когда то давно на AVR I2C юзал, но не библиотекой. Управлял регистрами. А Вам наверное надо получше изучить библиотеку. Наверняка там есть готовые функции для всего этого.


Вложения:
W.png [17.21 KiB]
Скачиваний: 1170

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Работа с внешней eeprom по i2c
СообщениеДобавлено: Ср окт 25, 2017 17:06:36 
Потрогал лапой паяльник

Зарегистрирован: Чт июн 30, 2011 10:10:23
Сообщений: 342
Откуда: лютая Россия
Рейтинг сообщения: 0
Да, я понимаю как оно в теории работает, в принципе у всех и2ц обмен одинаковый, у меня с ними успешно получалось работать на stm32

В общем, проблему решил от проблемы избавился. Поскольку при создании платы подключил флешку к выводам SCL\SDA контроллера, то перешел к "железной" работе с i2c (по TWI).
Битик успешно удалось записать и считать, но честно говоря, пока что не влезал внутрь, с целью вникнуть в работу.

Код:
#define EEPROM_TWI_BUS_ADDRESS (0xA0 >> 1)

{
struct
     {
     struct
          {
          unsigned char msb;
          unsigned char lsb;
          } addr;
     unsigned char data;
     } twi_eeprom;


unsigned char eeprom_rd_data;


Код:
twi_master_init(100);
twi_eeprom.addr.msb=0x00;
twi_eeprom.addr.lsb=0x00;
twi_eeprom.data=0x55;
twi_master_trans(EEPROM_TWI_BUS_ADDRESS,(unsigned char *) &twi_eeprom,3,0,0);
twi_master_trans(EEPROM_TWI_BUS_ADDRESS,(unsigned char *) &twi_eeprom,2,&eeprom_rd_data,1);

_________________
— Да не боись, всего двенадцать вольт… и восемьсот ампер.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y