|
Проблемы с EEPROM, общение по I2C, при помощи MSP430 |
|
|
|
Nov 12 2010, 23:10
|

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

|
Вообщем вроде все как надо. Пишу по адресу 0x00 в 24LC00 значение (в этом примере 0x56), а читаю (Random Read, то есть по конкретному адресу) почему то 0xFF (то есть ничего не записалось получается, т.к. в памяти EEPROM по умолчению сидит 0xFF). Картинки в приложении. Вроде все верно. Пока не понял в чем дело. Может у вас есть какие-то идеи... Вот описание 24LC00 http://ww1.microchip.com/downloads/en/DeviceDoc/21178E.pdf
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|
|
|
|
|
Nov 24 2010, 02:59
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(sergeeff Jr. @ Nov 24 2010, 00:36)  После ACK линия SDA остается на нуле, соответственно по описанному в даташите методу никакого START не будет... Я не работал непосредственно с USI вживую и вынужден доверять вам, но вот читаю в UG раздел 14.2.4 I2C Mode -> I2C Master Mode и вижу Цитата To configure the USI module as an I2C master the USIMST bit must be set. In master mode, clocks are generated by the USI module and output to the SCL line while USIIFG = 0. When USIIFG = 1, the SCL will stop at the idle, or high, level. Multi-master operation is supported as described in the Arbitration section. The master supports slaves that are holding the SCL line low only when USIDIVx > 0. When USIDIVx is set to /1 clock division (USIDIVx = 0), connected slaves must not hold the SCL line low during data transmission. Otherwise the communication may fail. У вас ведь режим мастер вроде? Так почему после передачи 8 бит SCL в нуле остается? У м/с EEPROM нет возможности управлять уровнем SCL. У нее SCL это чистый вход.
|
|
|
|
|
Nov 24 2010, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(sergeeff Jr. @ Nov 24 2010, 12:24)  SCL как раз и получает high level (см. картинки в начале, там тоже видно). Нифига там не понятно. Вы бы еще в микроскоп предложили эти картинки рассматривать.  Как вы ACK на аппаратный адрес EEPROM получаете? Фрагмент кода приведите. Цитата(sergeeff Jr. @ Nov 24 2010, 12:24)  А менять значение SDA я не могу, пока SCL high. Почему не можете? Ведь изменение SDA во время SCL=high как раз и создает старт- или стоп-условие.
|
|
|
|
|
Nov 24 2010, 19:00
|

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

|
Переход снизу вверх создает стоп (мне не надо этого, потому что я еще не закончил передачу), а переход сверху вниз создает СТАРТ, но чтобы сделать этот переход мне надо сначала наверх попасть...  А примеры кода тут http://www.ti.com/litv/zip/slac080i (кстати свежак, но с i2c все по старому) msp430x20x3_usi_06.c Самых интересных вещей msp430x20x3_usi_10.с msp430x20x3_usi_11.с там к сожалению нет... А в msp430x20x3_usi_16.c никакого RESTART на самом деле нет.
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|
|
|
|
|
Nov 24 2010, 19:23
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(sergeeff Jr. @ Nov 25 2010, 00:00)  Переход снизу вверх создает стоп (мне не надо этого, потому что я еще не закончил передачу), а переход сверху вниз создает СТАРТ, но чтобы сделать этот переход мне надо сначала наверх попасть...  Ой, чей-то я не вкуриваю.  Откуда снизу вверх-то?  Перед тем как возникает нужда сделать restart (а нужда эта возникает только при RANDOM READ, времянка которого на той самой Figure 8-2 про которую вы три раза упомянули) бит ACK передает slave, а не master. Мастер в этом такте принимает/проверяет этот бит и у него SDA=high, т.е. отключен, т.к. выход open-drain. Поэтому нет никакой проблемы в том, чтобы сразу после приема ACK сделать для SDA переход high->low, создав условие для restart.
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 24 2010, 23:24
|

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

|
Цитата(rezident @ Nov 24 2010, 09:43)  Нифига там не понятно. Вы бы еще в микроскоп предложили эти картинки рассматривать.  Как вы ACK на аппаратный адрес EEPROM получаете? Фрагмент кода приведите. Почему не можете? Ведь изменение SDA во время SCL=high как раз и создает старт- или стоп-условие. Вы меня сами попросили привести пример кода "как я ACK на аппаратный адрес EEPROM получаю". Я привел. Кстати как I2C без железки проверять я не знаю. Как Вы собираетесь код (тот который компилируется) проверять? У этого мк вообще I2C не работает, когда debugger используется (порты имеют несколько функций - или это или то).
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|
|
|
|
|
Nov 28 2010, 15:36
|
Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032

|
На всякий случай.Уже ушёл. (в процессе железной отладки не забывать почаще вкл/выкл питание EEPROM; это сугубо добровольно, но когда надоест тупить в непонятные глюки "один раз случайно сработало, потом навсегда перестало"...)
Сообщение отредактировал нечитатель - Nov 28 2010, 15:40
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|