Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Описание SPI I2C и др.
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам
virtuality
Подскажите пожалуйста, где найти описание протоколов SPI и I2C на русском. Гуглил - не нашел.
upc2
Интересная ссылка предоставленная LordN:
<http://lord-n.narod.ru/walla.html#PredkoMSpravochnik_PICcontrollersdjvu>
rezident
Есть весьма неплохой русскоязычный информационный сервер с кучей переводных статей gaw.ru. Рекомендую!
dRaider
Смотри pdf неплохое описание I2C
Nanobyte
Посмотрите здесь: http://rs232.ru/
Там много информации по интерфейсам.
add
Еще вопросик по i2с. Есть мс с интерфейсом I2c (pca9555). Обмен в две стороны. По передачи данных все понятно.. а вот чтение непонятки.. а именно непонятно когда мс устанавливает бит на SDA? по фронту SCL? по спецификации данные должны устанавливаться когда SCL -low. ТОгда может slave мс выставляет бит данных по заднему фронту предыдущего импульса?! а как же тогда первый(старший) бит данных? Вообщем огромная просьба помочь разбратся.
ps:перерыл протоколы и описания по i2c. Ничего не нашел:-(
Сергей Борщ
Цитата(add @ Jul 10 2007, 09:03) *
а как же тогда первый(старший) бит данных?
Пока SCLK низкий - данные могут меняться сколько угодно. Поэтому устройство устанавливает данные на SDA сразу после того, как SCLK перейдет из высокого уровня в низкий. "Самому первому" биту предшествует комбинация "Старт" в конце которой SCLK переходит из высокого уровня в низкий
add
Цитата
комбинация "Старт" в конце которой SCLK переходит из высокого уровня в низкий

Огромная ПАСИБА! буду проверять на железе:-) прим: данные от slave мс идут после бита ACK(после адреса устройства, т.е. старт уже был). Соответственно "первый бит"данных будет устанавливаться после появления низкого уровня(после ACK). Если не так, поправьте.
Сергей Борщ
Цитата(add @ Jul 10 2007, 11:41) *
Соответственно "первый бит"данных будет устанавливаться после появления низкого уровня(после ACK). Если не так, поправьте.
Нет, мастер сформирует фронт SCLK, считает состояние ACK, сформирует спад SCLK, и вот в этот момент slave начнет выдавать бит.
А... если "после появления низкого уровня" имеется ввиду SCLK, то да, именно так.
Halfback
помогите плиз мне с этой PCA9554А. Физический адрес: 0. Хочу чтобы на выходе засветило 0хАА. В CAVR пишу так:
Код
while (1)
      {
      // Place your code here
      i2c_start();
      i2c_write(0x70); // 01110000
      i2c_write(0x01); // Output Register    
      i2c_write(0xAA); // Output State
      i2c_stop();
        
      delay_ms(500);
      
      };


На железе не работает. Ладно. Пошел мучать протеус: там тоже самое. sad.gif
Halfback
разобрался сам. Оказывается не хватало сконфигурировать I/O на выход, т.е. обнулить третий регистр. Тобишь вот:
Код
      i2c_start();  
      i2c_write(0x70); // 01110000
      i2c_write(0x03); // Register I/O  
      i2c_write(0x00); // Config Reg I/O (config as ALL uotput's)
      i2c_stop();
      
      i2c_start();  
      i2c_write(0x70); // 01110000
      i2c_write(0x01); // Output Register  
      i2c_write(0xAA); // Output State
      i2c_stop();        
      delay_ms(500);
atlantic
Народ, подскажите, может кто знает, какой-нибудь доступный (freeware) инструмент под WinXP, кабель-переходник (желательно USB) с помощью которого можно было бы читать/писать по I2C(типа мастера шины), ну и соответствующий софт позволяющий просто всем этим делом управлять (делать дампы, записывать обратно, анализировать и т.п.) ?
HARMHARM
Цитата(atlantic @ Apr 3 2009, 21:57) *
Народ, подскажите, может кто знает, какой-нибудь доступный (freeware) инструмент под WinXP, кабель-переходник (желательно USB) с помощью которого можно было бы читать/писать по I2C(типа мастера шины), ну и соответствующий софт позволяющий просто всем этим делом управлять (делать дампы, записывать обратно, анализировать и т.п.) ?

PonyProg. Схемы в описании есть, для I2C что-то типа четырех диодов и трех резисторов. Проверено - работает отлично! Кабель в ком-порт, с USB переходником работало вроде.
Кроме I2C он еще много чего программировать может.
vladimir_orl
Здравствуйте. Сейчас разбираю (исследую) одно устройство, состоящее из ведущего и ведомого. Интерфейс общения - SPI. По линии MOSI всё нормально - сигнал амплитудой 5 В. А по линии MISO - появился вопрос. В собранном состоянии - обычный 5-ти вольтовый сигнал. Если разъединить ведущего и ведомого, то на ведущем - постоянные 5 вольт, на ведомом - 0..0,5 вольт. Это что - открытый коллектор? Своё питание на ведомом имеется. Кто-нибудь сталкивался с таким? Если можно, объясните, зачем так сделано, в чём здесь улучшение.

Здравствуйте. Сейчас разбираю (исследую) одно устройство, состоящее из ведущего и ведомого. Интерфейс общения - SPI. По линии MOSI всё нормально - сигнал амплитудой 5 В. А по линии MISO - появился вопрос. В собранном состоянии - обычный 5-ти вольтовый сигнал. Если разъединить ведущего и ведомого, то на ведущем - постоянные 5 вольт, на ведомом - 0..0,5 вольт. Это что - открытый коллектор? Своё питание на ведомом имеется. Кто-нибудь сталкивался с таким? Если можно, объясните, зачем так сделано, в чём здесь улучшение.
DmitryM
Цитата(vladimir_orl @ May 31 2013, 12:10) *
Это что - открытый коллектор?

Это не открытый коллектор, это выход с Z-состоянием, поскольку на шине могут сидеть несколько устройств
vladimir_orl
Спасибо за ответ. Почему она тогда в отсоединённом состоянии (от мастера) показывает 0,5 В? Люди советуют делать подтяжку на +5 В резистором 10к. Попробовал, но фронты сильно завалены.
DmitryM
Цитата(vladimir_orl @ Jun 3 2013, 08:35) *
Спасибо за ответ. Почему она тогда в отсоединённом состоянии (от мастера) показывает 0,5 В? Люди советуют делать подтяжку на +5 В резистором 10к. Попробовал, но фронты сильно завалены.

Потому что рекомендуется делать подтяжку на стороне мастера, иначе, паралельное включение подтяжек на слейвах приведет к малому сопротивлению, которое мастер не сможет прокачать.
Fujitser
Цитата(atlantic @ Apr 4 2009, 00:57) *
Народ, подскажите, может кто знает, какой-нибудь доступный (freeware) инструмент под WinXP, кабель-переходник (желательно USB) с помощью которого можно было бы читать/писать по I2C(типа мастера шины), ну и соответствующий софт позволяющий просто всем этим делом управлять (делать дампы, записывать обратно, анализировать и т.п.) ?


Под WinXP не знаю, а под Linux рекомендую i2ctools.
vladimir_orl
Здравствуйте, уважаемые форумчане. Опять куча вопросов про SPI. Точнее про одну из реализаций.

Сейчас разбираю, как общаются два устройства (собственно мастер и слэйв) по SPI в третьем режиме. Особенно заинтересовал сигнал Clock. Начало понятное - вначале 1, затем происходит спад с 1 на 0, затем восемь фронтов с 0 на 1. Так вот, там есть ещё один цикл, девятый, по длительности примерно равный всему байту. Фото осциллографа - в пристёжке. Это что - сигнал самосинхронизации? И как его учитывать, если я хочу написать программный слэйв? У меня сейчас сделано определение начала по длительности сигнала, когда 1.
ZASADA
Цитата(vladimir_orl @ Jul 9 2013, 11:18) *
Здравствуйте, уважаемые форумчане. Опять куча вопросов про SPI. Точнее про одну из реализаций.

Сейчас разбираю, как общаются два устройства (собственно мастер и слэйв) по SPI в третьем режиме. Особенно заинтересовал сигнал Clock. Начало понятное - вначале 1, затем происходит спад с 1 на 0, затем восемь фронтов с 0 на 1. Так вот, там есть ещё один цикл, девятый, по длительности примерно равный всему байту. Фото осциллографа - в пристёжке. Это что - сигнал самосинхронизации? И как его учитывать, если я хочу написать программный слэйв? У меня сейчас сделано определение начала по длительности сигнала, когда 1.

чета фото не видно
vladimir_orl
Нажмите для просмотра прикрепленного файла

Жёлтый - это как раз сигнал клок. Видно, что после меандра идёт ещё спад длительностью равный примерно один байт.
ZASADA
в середине чипселект?
какая микросхема такие клоки формирует? больше похоже на самопального программного мастер-SPI .
в любом случае никакой самосинхронизации нет в природе. слэйв на прием представляет из себя примитивный сдвиговый регистр. появился чипселект и такты-по каждому такту записывается 1 бит.Тоже самое на передачу. по каждому такту содержимое сдвигового регистра выдвигается наружу на мисо.
vladimir_orl
Жёлтый – CLK
Розовый - MISO
Зелёный – MOSI


Показано начало обмена, пока ещё слэйв нули выдаёт.

Линии "чипселект" там нет. Поскольку мастер и слэйв "заточены" друг под друга.
ZASADA
значит кривая реализация программного мастер-SPI.
и по осциллограмме кажется, что слэйв переводит MISO в 3 состояние по 9 срезу. может там обмен 9 бит?
vladimir_orl
Нажмите для просмотра прикрепленного файла

В обрывках документации пишется про 8 битные данные.

Насколько я знаю, в 3-м режиме данные читаются по фронту.
ZASADA
на укрупненной осциллограмме видно, что 8 бит. мастер пишет 1011 0000, слейв отвечает 0000 0000 и переходит в 3 состояние
лишний такт или ошибка реализации мастера (скорее всего) или специально сделан для самольномого протокола обмена.
на стандартном SPI его быть не должно.
vladimir_orl
Да, спасибо. Я и говорю, что это один из вариантов реализации SPI.
Я вот просто думаю, зачем разработчики это всё сделали. Или это выдержка минимальной необходимой для слэйва паузы или так клоком какой-то управляющий сигнал для слэйва передаётся. Хотя может сам слэйв линию клока захватывает. Аналогично как в I2C.
ZASADA
в SPI слейв линию клока захватить не может. в SPI она четко описана - для мастера выход для слейва вход. без вариантов.
vladimir_orl
И ещё вопрос интересный. Если писать программный SPI для третьего режима. Там ведь захват данных по фронту клока. А когда мы включаем SPI, мы тоже выставляем на клоке единицу как начальное состояние. Если мы пишем монитор данных, как мы отличим фронт начального состояния от "рабочего" фронта?

И ещё вопрос интересный. Если писать программный SPI для третьего режима. Там ведь захват данных по фронту клока. А когда мы включаем SPI, мы тоже выставляем на клоке единицу как начальное состояние. Если мы пишем монитор данных, как мы отличим фронт начального состояния от "рабочего" фронта?
ZASADA
Цитата(vladimir_orl @ Jul 9 2013, 14:12) *
И ещё вопрос интересный. Если писать программный SPI для третьего режима. Там ведь захват данных по фронту клока. А когда мы включаем SPI, мы тоже выставляем на клоке единицу как начальное состояние. Если мы пишем монитор данных, как мы отличим фронт начального состояния от "рабочего" фронта?

в нормальном SPI все проблемы с ложными клоками решает сигнал чипселект. Более того, есть много микросхем, которые без чипселекта просто не работают.
vladimir_orl
Да. Но тут вот такие девайсы. И надо программно монитор протокола написать. Буду все фронты, которые пришли после паузы больше чем 8 тактов, считать начальными. Тогда будет наложение данных от первого, настоящего фронта на последний, ненастоящий.
ZASADA
в принципе в природе могут быть реализации SPI где линия CLK переходит в 3 состояние и используется для синхронизации систем/организации подтверждения и т.д. Отключите выход CLK от слейва и подтяните к питанию. Сразу будет видно, кто формирует этот "девятый" такт.
vladimir_orl
Да. Здесь я нашёл ветку.
Цитата
Интерфейс управления объективами EF цифровых зеркалок CANON?, Может кто встречался с таким?


Там это тоже есть. В частности
Цитата
Это не 9-ый бит. В конце посылки из 8 бит тушка переводит линию LCLK в 3 состояние для того чтобы объектив со своей стороны сигнализировал об ошибках поднятием этой линии в 1. Так что переход в 1 после перерыва - это просто тушка снова выставила 1 на тактовой линии.


Но вот мне надо эмулятор объектива сделать. Пробовал пропускать 9-й такт и читать данные без него - всё равно белиберда. Наверное, это в схеме надо что-то подправить, т. к. в протеусе всё работает. И насчёт подтяжки тоже не совсем понял.

Сигнал 1/0 формируется слэйвом или подтяжкой линии MISO к vdd? А слэйв только как открытый коллектор работает?
ZASADA
для начала надо узнать кто формирует этот "девятый такт" на линии CLK - мастер или слейв. как это сделать я написал выше- надо разорвать линию CLK между мастером и слейвом.
если останутся 9 тактов-значит их формирует мастер, если 8-значит мастер переводит выход CLK в 3 состояние и ждет пока им дернет слейв (надо будет попробовать подтяжки и к питанию и к земле чтобы убедится что точно 3 состояние). Тогда и вам в эмуляторе объектива тоже надо будет дергать этой линией.
обычно MISO в слейве во время обмен -чистый выход , после окончания обмена-3 состояние.MISO в мастере-чистый вход. линия MISO подтянута к питанию или внешним резистором или внутри мастера.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2016 Invision Power Services, Inc.