реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблемы с EEPROM, общение по I2C, при помощи MSP430
sergeeff Jr.
сообщение Nov 12 2010, 23:10
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Вообщем вроде все как надо. Пишу по адресу 0x00 в 24LC00 значение (в этом примере 0x56), а читаю (Random Read, то есть по конкретному адресу) почему то 0xFF (то есть ничего не записалось получается, т.к. в памяти EEPROM по умолчению сидит 0xFF). Картинки в приложении. Вроде все верно. Пока не понял в чем дело. Может у вас есть какие-то идеи...

Вот описание 24LC00
http://ww1.microchip.com/downloads/en/DeviceDoc/21178E.pdf
Прикрепленные файлы
Прикрепленный файл  TEK0002.BMP ( 76.05 килобайт ) Кол-во скачиваний: 25
Прикрепленный файл  TEK0003.BMP ( 76.05 килобайт ) Кол-во скачиваний: 17
 


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Nov 13 2010, 05:05
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(sergeeff Jr. @ Nov 13 2010, 03:10) *
Вообщем вроде все как надо. Пишу по адресу 0x00 в 24LC00 значение (в этом примере 0x56), а читаю (Random Read, то есть по конкретному адресу) почему то 0xFF (то есть ничего не записалось получается, т.к. в памяти EEPROM по умолчению сидит 0xFF). Картинки в приложении. Вроде все верно. Пока не понял в чем дело. Может у вас есть какие-то идеи...


А где repeated start при чтении??
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 13 2010, 12:56
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Да, кстати его и нет. Спасибо! cheers.gif


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 22 2010, 23:41
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Как это не смешно я перелопатил все примеры от TI, но так и не понял, как ИМЕННО в MSP430F2013 cделать этот repeated start. Такое впечатление, что его нужно делать "вручную", но никакого приятного глазу решения так и не придумал. Может что подскажете?

Я просто на данный момент задачу подругому решил (repeated start не понадобился), но интерес распирает... smile.gif


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 23 2010, 00:01
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(sergeeff Jr. @ Nov 23 2010, 04:41) *
Такое впечатление, что его нужно делать "вручную"

Именно "вручную" laughing.gif
Цитата("MSP430x2xx Family User's Guide")
14.2.4 I2C Mode
...
START Condition

A START condition is a high-to-low transition on SDA while SCL is high. The START condition can be generated by setting the MSB of the shift register to 0. Setting the USIGE and USIOE bits makes the output latch transparent and the MSB of the shift register is immediately presented to SDA and pulls the line low. Clearing USIGE resumes the clocked-latch function and holds the 0 on SDA until data is shifted out with SCL.
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 23 2010, 00:17
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



При первом START'e все так и есть. Но проблема в том, что у меня после переданного байта SDA low, а SCL high. То есть мне надо сделать SCL low, а потом SDA high... Ну то есть получается, что я NACK должен выплюнуть перед START...


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 23 2010, 00:27
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Дык я не понял, в чем затруднения-то? В каком именно месте NACK смущает? Выдержка из спецификации I2C.
Цитата
There are five conditions that lead to the generation of a NACK:
...
5.A master-receiver needs to signal the end of the transfer to the slave transmitter.
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 23 2010, 07:21
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Смущает то, что никакого NACK быть не должно
http://ww1.microchip.com/downloads/en/DeviceDoc/21178E.pdf (Figure 8-2)


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 23 2010, 17:50
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(sergeeff Jr. @ Nov 23 2010, 12:21) *
Смущает то, что никакого NACK быть не должно
А откуда он там по-вашему должен получаться? Ведь после передачи 8-и бит SCL тормозится. Далее зарядили через USICNT передачу одного бита со значением 0. Это будет передачей ACK. После передачи одного бита (ACK) SCL опять тормозится. Формируем "вручную" повторный старт. Заряжаем следующие 8 бит на прием или передачу. Записываем 8 в USICNT. Поехали. Где тут "лишний" NACK получается-то? cranky.gif
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 23 2010, 19:36
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



После ACK линия SDA остается на нуле, соответственно по описанному в даташите методу никакого START не будет...


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 23 2010, 20:27
Сообщение #11


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Вообще то после чтения последнего байта надо NACK выставлять, так устройство поймет что больше ничего передавать не надо, это везде так. И в даташите это написано (на картинках).
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 23 2010, 20:56
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Еще раз смотрим
http://ww1.microchip.com/downloads/en/DeviceDoc/21178E.pdf (Figure 8-2)


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post
KRS
сообщение Nov 23 2010, 21:19
Сообщение #13


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



да бага значит в даташите! должен быть NACK по идее.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 23 2010, 22:33
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (sergeeff Jr. @ Nov 23 2010, 22:56) *
Еще раз смотрим
Вообще-то это ACK, который формирует память в ответ на ваши байты. И который говорит вам о том, что адрес она "скушала". В первой посылке вы сформировали R/W = 0, значит вы передаете байты а память отвечает вам ACKи. И так до стопа или повторного старта. Сформировали стоп-старт или повторный старт, передали первый байт с R/W=1 - все, теперь память посылает байты а вы ей в ответ - ACKи. И снова до стопа/повторного старта.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sergeeff Jr.
сообщение Nov 23 2010, 23:22
Сообщение #15


Знающий
****

Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964



Так вот вопрос в том, КАК!!! послать после ACK'а, который я получил - повторный старт.


--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th June 2025 - 06:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01503 секунд с 7
ELECTRONIX ©2004-2016