Аудио усилители с интерфейсом i2s и обратной связью от компании ti

Подробное описание интерфейса I2C

Аудио усилители с интерфейсом i2s и обратной связью от компании ti

Читать все новости ➔

Интерфейс I2C (или по другому IIC) – это достаточно широко распространённый сетевой последовательный интерфейс, придуманный фирмой Philips и завоевавший популярность относительно высокой скоростью передачи данных (обычно до 100 кбит/с, в современных микросхемах до 400 кбит/с), дешевизной и простотой реализации.

1) Физика.

Физически сеть представляет собой двухпроводную шину, линии которой называются DATA и CLOCK (необходим ещё и третий провод – земля, но интерфейс принято называть двухпроводным по количеству сигнальных проводов).

Соответственно, по линии DATA передаются данные, линия CLOCK служит для тактирования. К шине может быть подключено до 128 абонентов, каждый со своим уникальным номером.

В каждый момент времени информация передаётся только одним абонентом и только в одну сторону.

Устройства I2C имеют выход с “открытым коллектором”. Когда выходной транзистор закрыт – на соответствующей линии через внешний подтягивающий резистор устанавливается высокий уровень, когда выходной транзистор открыт – он притягивает соответствующую линию к земле и на ней устанавливается низкий уровень (смотрите рисунок).

Резисторы имеют номинал от нескольких килоом до нескольких десятков килоом (чем выше скорость – тем меньше номинал резисторов, но больше энергопотребление). На рисунке треугольниками на входе показано, что входы высокоомные и, соответственно, влияния на уровни сигналов на линиях они не оказывают, а только “считывают” эти уровни.

Обычно используются уровни 5В или 3,3В.

2) Логика.

Любое устройство на шине I2C может быть одного из двух типов: Master (ведущий) или Slave (ведомый). Обмен данными происходит сеансами. “Мастер”-устройство полностью управляет сеансом: инициирует сеанс обмена данными, управляет передачей, подавая тактовые импульсы на линию Clock, и завершает сеанс.

Кроме этого, в зависимости от направления передачи данных и “Мастер” и “Слэйв”-устройства могут быть “Приёмниками” или “Передатчиками”. Когда “Мастер” принимает данные от “Слэйва” – он является “Приёмником”, а “Слэйв” – “Передатчиком”. Когда же “Слэйв” принимает данные от “Мастера”, то он уже является “Приёмником”, а “Мастер” в этом случае является “Передатчиком”.

Не надо путать тип устройства “Мастер” со статусом “Передатчика”.

Несмотря на то, что при чтении “Мастером” информации из “Слэйва”, последний выставляет данные на шину Data, делает он это только тогда, когда “Мастер” ему это разрешит, установкой соответствующего уровня на линии Clock. Так что, хотя “Слэйв” в этом случае и управляет шиной Data, – самим обменом всё равно управляет “Мастер”.

В режиме ожидания (когда не идёт сеанс обмена данными) обе сигнальные линии (Data и Clock) находятся в состоянии высокого уровня (притянуты к питанию).

Каждый сеанс обмена начинается с подачи “Мастером” так называемого Start-условия. “Старт-условие” – это изменение уровня на линии Data с высокого на низкий при наличии высокого уровня на линии Clock.

После подачи “Старт-условия” первым делом “Мастер” должен сказать с кем он хочет пообщаться и указать, что именно он хочет – передавать данные в устройство или читать их из него.

Для этого он выдаёт на шину 7-ми битный адрес “Слэйв” устройства (по другому говорят: “адресует “Слэйв” устройство”), с которым хочет общаться, и один бит, указывающий направление передачи данных (0 – если от “Мастера” к “Слэйву” и 1 – если от “Слэйва” к “Мастеру”).

Первый байт после подачи “Старт”-условия всегда всеми “Слэйвами” воспринимается как адресация.

Поскольку направление передачи данных указывается при открытии сеанса вместе с адресацией устройства, то для того, чтобы изменить это направление, необходимо открывать ещё один сеанс (снова подавать “Старт”-условие, адресовать это же устройство и указывать новое направление передачи).

После того, как “Мастер” скажет, к кому именно он обращается и укажет направление передачи данных, – начинается собственно передача: “Мастер” выдаёт на шину данные для “Слэйва” или получает их от него. Эта часть обмена (какие именно данные и в каком порядке “Мастер” должен выдавать на шину, чтобы устройство его поняло и сделало то, что ему нужно) уже определяется каждым конкретным устройством.

Заканчивается каждый сеанс обмена подачей “Мастером” так называемого Stop-условия, которое заключается в изменении уровня на линии Data с низкого на высокий, опять же при наличии высокого уровня на линии Clock. Если на шине сформировано Stop-условие, то закрываются все открытые сеансы обмена.

Внутри сеанса любые изменения на линии Data при наличии высокого уровня на линии Clock запрещены, поскольку в это время происходит считывание данных “Приёмником”.

Если такие изменения произойдут, то они в любом случае будут восприняты либо как “Старт”-условие (что вызовет прекращение обмена данными), либо как “Стоп”-условие (что будет означать окончание текущего сеанса обмена).

Соответственно, во время сеанса обмена установка данных “Передатчиком” (выставление нужного уровня на линии Data) может происходить только при низком уровне на линии Clock.

Несколько слов по поводу того, в чём в данном случае разница между “прекращением обмена данными” и “окончанием сеанса обмена”.

В принципе “Мастеру” разрешается, не закрыв первый сеанс обмена, открыть ещё один или несколько сеансов обмена с этим же (например, как было сказано выше, для изменения направления передачи данных) или даже с другими “Слэйвами”, подав новое “Старт”-условие без подачи “Стоп”-условия для закрытия предыдущего сеанса.

Управлять линией Data, для того, чтобы отвечать “Мастеру”, в этом случае будет разрешено тому устройству, к которому “Мастер” обратился последним, однако старый сеанс при этом нельзя считать законченным. И вот почему.

Многие устройства (например те же eeprom-ки 24Схх) для ускорения работы складывают данные, полученные от “Мастера” в буфер, а разбираться с этими полученными данными начинают только после получения сигнала об окончании сеанса обмена (то есть “Стоп-условия”).

То есть, например, если на шине висит 2 микросхемы eeprom 24Cxx и вы открыли сеанс записи в одну микросхему и передали ей данные для записи, а потом, не закрывая этот первый сеанс, открыли новый сеанс для записи в другую микросхему, то реальная запись и в первую и во вторую микросхему произойдёт только после формирования на шине “Стоп-условия”, которое закроет оба сеанса. После получения данных от “Мастера” eeprom-ка складывает их во внутренний буфер и ждёт окончания сеанса, для того, чтобы начать собственно процесс записи из своего внутреннего буфера непосредственно в eeprom. То есть, если вы после после передачи данных для записи в первую микруху не закрыли этот сеанс, открыли второй сеанс и отправили данные для записи во вторую микруху, а потом, не сформировав “Стоп-условие”, выключили питание, то реально данные не запишутся ни в первую микросхему, ни во вторую. Или, например, если вы пишете данные попеременно в две микрухи, то в принципе вы можете открыть один сеанс для записи в первую, потом другой сеанс для записи во вторую, потом третий сеанс для записи опять в первую и т.д., но если вы не будете закрывать эти сеансы, то в конце концов это приведёт к переполнению внутренних буферов и в итоге к потере данных.

Здесь можно привести такую аналогию: ученики в классе (“слэйвы”) и учитель (“мастер”). Допустим учитель вызвал какого-то ученика (пусть будет Вася) к доске и попросил его решить какой-то пример.

После того как Вася этот пример решил, учитель вызвал к доске Петю и начал спрашивать у него домашнее задание, но Васю на место не отпустил.

Вот в этом случае вроде бы разговор с Васей закончен, – учитель разговаривает с Петей, но Вася стоит у доски и не может спокойно заниматься своими делами (сеанс общения с ним не закрыт).

В случае, если “Слэйв” во время сеанса обмена не успевает обрабатывать данные, – он может растягивать процесс обмена, удерживая линию Clock в состоянии низкого уровня, поэтому “Мастер” должен проверять возврат линии Clock к высокому уровню после того, как он её отпустит.

Читайте также:  Телескайп

Хотелось бы подчеркнуть, что не стоит путать состояние, когда “Слэйв” не успевает принимать или посылать данные, с состоянием, когда он просто занят обработкой данных, полученных в результате сеанса обмена.

В первом случае (во время обмена данными) он может растягивать обмен, удерживая линию Clock, а во втором случае (когда сеанс обмена с ним закончен) он никакие линии трогать не имеет права. В последнем случае он просто не будет отвечать на “обращение” к нему от “Мастера”.

Внутри сеанса передача состоит из пакетов по девять бит, передаваемых в обычной положительной логике (то есть высокий уровень – это 1, а низкий уровень – это 0). Из них 8 бит передаёт “Передатчик” “Приёмнику”, а последний девятый бит передаёт “Приёмник” “Передатчику”. Биты в пакете передаются старшим битом вперёд.

Последний, девятый бит называется битом подтверждения ACK (от английского слова acknowledge – подтверждение). Он передаётся в инвертированном виде, то есть 0 на линии соответствует наличию бита подтверждения, а 1 – его отсутствию.

Бит подтверждения может сигнализировать как об отсутствии или занятости устройства (если он не установился при адресации), так и о том, что “Приёмник” хочет закончить передачу или о том, что команда, посланная “Мастером”, не выполнена.

Каждый бит передаётся за один такт.

Та половина такта, во время которой на линии Clock установлен низкий уровень, используется для установки бита данных на шину передающим абонентом (если предыдущий бит передавал другой абонент, то он в это время должен отпустить шину данных). Та половина такта, во время которой на линии Clock установлен высокий уровень, используется принимающим абонентом для считывания установленного значения бита с шины данных.

https://www.youtube.com/watch?v=VP7Iz5rhA8A

Вот собственно и всё. На рисунках ниже всё это описание показано в графической форме.

3) Диаграммы и тайминги.

Параметр Обозн. Мин.знач. Комментарий
Свободная шина tBUF 4,7 мкс это минимальное время, в течении которого обе линии должны находиться в свободном состоянии перед подачей “Старт”-условия
Фиксация”Старт”- условия tHD;STA 4,0 мкс минимальное время от подачи “Старт”- условия до начала первого такта передачи
Готовность”Стоп”- условия tSU;STO 4,0 мкс минимальное время, через которое можно подавать “Стоп”- условие после освобождения шины Clock
Длительность LOW полупер. шины Clock tLOW 4,7 мкс минимальная длительность полупериода установки данных (когда на шине Clock низкий уровень)
Длительность HIGH полупер. шины Clock tHIGH 4,0 мкс минимальная длительность полупериода считывания данных (когда на шине Clock высокий уровень)
Удержание данных tHD;DAT то есть данные на шину Data можно выставлять сразу после спада на линии Clock
Готовность данных tSU;DAT 250 нс то есть поднимать уровень на шине Clock можно не ранее 250 нс после установки данных на шине Data

Минимальные значения времени в таблице указаны для максимальной скорости передачи 100 кбит/с.

radiohlam.ru

Возможно, Вам это будет интересно:

Источник: http://meandr.org/archives/10284

National Products from TI: LM48901 – новая микросхема квадрафонического усилителя класса D семейства PowerWise® для реализации систем пространственного звучания, упрощающая создание портативных многоканальных аудиоустройств

LM48901 представляет собой четырехканальный аудио усилитель класса D для портативных мультимедийных устройств, оснащенный собственным пространственным процессором National Products для формирования расширенной звуковой сцены.

Усилители класса D от National Products содержат ШИМ – контроллеры со схемой управления скоростью нарастания/спада фронтов (ERC), существенно снижающей выбросы радиочастотных помех, сохраняя при этом качества звука и энергетическую эффективность.

Используемый устройством гибкий I2S интерфейс обеспечивает совместимость со стандартными последовательными звуковыми интерфейсами. 18-разрядный стерео АЦП с дифференциальными входами позволяет устройству обрабатывать аналоговые стерео аудио сигналы.

Управление усилителем осуществляется посредством I2C-совместимого интерфейса. Непрерывная выходная мощность устройства составляет 2.8 Вт на нагрузке 4 Ом при суммарном коэффициенте нелинейных искажений и шума (THD+N) не более 10%. При включении аудиосистем по схеме 2.1, два выходных усилителя могут быть соединены параллельно для увеличения выходной мощности на 4-омной нагрузке.

Схемы защиты от короткого замыкания на выходе и тепловой перегрузки предохраняют устройство от повреждений при неисправностях внешних цепей. Улучшенная система подавления щелчка при переходных процессах устраняет акустические выбросы при включении и выключении устройства. LM48901 доступна в компактных microSMD и LLP корпусах.

Внутренняя архитектура LM48901

Отличительные особенности:

  • Процессор пространственной обработки звука
  • I2S — совместимый входной интерфейс
  • Стерео АЦП с дифференциальными входами
  • Схема управления скоростью нарастания/спада фронтов
  • Параллельный режим вывода
  • Схема защиты от короткого замыкания и тепловой перегрузки
  • Минимум внешних компонентов
  • Схема подавления акустических помех при переходных процессах
  • Отношение сигнал / шум (взвешенное) – 87 дБА (тип.)
  • Выходная мощность на канал при напряжении питания 5 В:
    • На нагрузке 8 Ом при суммарных гармонических искажениях и шуме не более 10% — 1.7 Вт (тип.)
    • На нагрузке 4 Ом при суммарных гармонических искажениях и шуме не более 10% — 2.8 Вт (тип.)
  • Суммарный коэффициент нелинейных искажений и шума — 0.06% (тип.)
  • Коэффициент полезного действия — 89% (тип.)
  • Коэффициент ослабления влияния источника питания на частоте 217 Гц – 71 дБ (тип.)
  • Типовой ток потребления в выключенном состоянии — 1 мкА
  • Диапазон напряжения питания:
    • Аналоговой части: 2.7…5.5 В
    • Усилителя: 2.7…5.5 В
    • Схемы ФАПЧ: 2.7…5.5 В
    • Интерфейса: 1.62…5.5 В
    • Цифровой части: 1.62…1.98 В
  • Диапазон рабочих температур: -40…+85°C
  • Доступны в компактных 36-выводных microSMD и 32-выводных LLP корпусах

Область применения:

  • Ноутбуки
  • Планшеты
  • Настольные компьютеры
  • Звуковые панели
  • Мультимедийные устройства
  • Аксессуары для MP3 плееров
  • Док-станции

Запросить образцы, средства разработки или техническую поддержку

Документация на LM48901 (англ.)

Источник: http://www.ebvnews.ru/technical/national-semiconductor/3611.html

Аудио усилители с интерфейсом I2S и обратной связью от компании TI

Компания Texas Instruments представила семейство усилителей с обратной связью, интерфейсом I2S и четырьмя цифровыми входами для стерео аудио устройств средней мощности, включая телевизоры, звуковые жалюзи, портативные док-станции, Bluetooth® динамики и автомобильные аудио решения для вторичного рынка. Семейство TAS5760xx характеризуется высокой частотой коммутации, что позволяет разработчикам использовать малогабаритные компоненты в выходном фильтре и снижает общие размеры устройства, а также стоимость материалов. ИС обеспечивает номинальную мощность 20 Вт на каждый канал без радиатора и предоставляет превосходные в своей отрасли характеристики, включая полный коэффициент гармонических искажений плюс шум величиной 0,03 процента на 1 Вт, перекрестную помеху -92 дБ и шум в свободном канале 66 мкВ.

TAS5760xx доступны в четырех, совместимых по цоколевке, 48-выводных исполнениях: TAS5760MD и TAS5760LD с усилителями для наушников/линейными усилителями, и TAS5760M и TAS5760L исполнения без усилителей для наушников. Для потребителей, которым требуются меньшие габариты, ИС TAS5760M и TAS5760L также предлагаются в 32-выводных корпусах размером 9 мм на 6 мм.

Основные характеристики и преимущества семейства TAS5760xx:

  • Высочайшие рабочие характеристики при средней мощности: наилучший в отрасли полный коэффициент гармонических искажений плюс шум, перекрестная помеха и шум в свободном канале, вместе с архитектурой с обратной связью, которые обеспечивают превосходный коэффициент подавления помех по питанию величиной 80 дБ, позволяют усилителям поддерживать постоянную мощность даже при неустойчивости батарейного выхода. Также существует возможность использования недорогих источников питания в системах с изменяемым уровнем питания, таких как портативные док-станции и Bluetooth динамики.
  • Наилучшие тепловые характеристики: Самое низкое значение сопротивление RDS(on) величиной 120 мОм обеспечивает превосходные тепловые характеристики для потребительских аудио устройств, которые работают при высокой окружающей температуре.
  • Снижение стоимости материалов и габаритных размеров: Высокая частота коммутации величиной до 1,2 МГц снижает электромагнитные помехи и позволяет использовать малогабаритные выходные фильтры, что снижает стоимость материалов и общие размеры.
  • Широкий диапазон питания: Поддерживает широкий диапазон напряжения от 4,5 В до 26,4 В, обеспечивая батарейное и линейное питание, которое удовлетворяет большинству среднемощных устройств.
  • Гибкость дизайна: Гибкие опции конфигурирования с помощью программных (I2C) и аппаратных (GPIO – ввод/вывод общего назначения) режимов управления обеспечивают поддержку конструкций многоканальных систем. Усилители можно объединять с PCM1808 стерео аналого-цифровым преобразователем, характеризующимся коэффициентом сигнал-шум величиной 99 дБ, что позволяет создавать высокопроизводительную цепочку аудио сигнала.
Читайте также:  Понижающий dc-dc преобразователь max16961 с током нагрузки до 3a

Доступность и цена

Новые усилители с интерфейсом I2S и обратной связью уже доступны для приобретения в 48-выводных TSSOP корпусах размером 12 мм на 8 мм. Цена за единицу в партии из 1 000 штук составляет:

  • TAS5760MD с интегрированным усилителем для наушников и максимальным напряжением питания 26,4 В: US$3.09.
  • TAS5760M без усилителя для наушников и максимальным напряжением питания 26,4 В: US$2.79.
  • TAS5760LD с интегрированным усилителем для наушников и максимальным напряжением питания 16,5 В: US$2.89.
  • TAS5760L без усилителя для наушников и максимальным напряжением питания 16,5 В: US$2.59.

Даташит

Источник новости

Источник: http://cxem.net/electronic_news/electronic_news181.php

Интерфейсная шина IIC (I2C)

Один из моих самых любимых интерфейсов. Разработан в компании Philips и право на его использование стоит денег, но все на это дружно положили и пользуют в свое удовольствие, называя только по другому.

В Atmel его зовут TWI, но от этого ничего не меняется 🙂 Обычно при разборе IIC во всех книгах ограничиваются примером с EEPROM на этом и ограничиваются. Да еще юзают софтверный Master.

Не дождетесь, у меня будет подробный разбор работы этой шины как в режиме Master так и Slave, да еще на аппаратных блоках с полным выполнением всей структуры конечного автомата протокола. Но об этом после, а сейчас основы.

Физический уровень.
Данные передаются по двум проводам — провод данных и провод тактов. Есть ведущий(master) и ведомый (slave), такты генерирует master, ведомый лишь поддакивает при приеме байта. Всего на одной двупроводной шине может быть до 127 устройств.

Схема подключения — монтажное И

Передача/Прием сигналов осуществляется прижиманием линии в 0, в единичку устанавливается сама, за счет подтягивающих резисторов. Их ставить обязательно всегда! Стандарт! Резисторы на 10к оптимальны.

Чем больше резистор, тем дольше линия восстанавливается в единицу (идет перезаряд паразитной емкости между проводами) и тем сильней заваливаются фронты импульсов, а значит скорость передачи падает. Именно поэтому у I2C скорость передачи намного ниже чем у SPI.

Обычно IIC работает либо на скорости 10кбит/с — в медленном режиме, либо на 100кбит/с в быстром. Но в реальности можно плавно менять скорость вплоть до нуля.
Ни в коем случае нельзя переключать вывод микроконтроллера в OUT и дергать ногу на +5.

Можно запросто словить КЗ и пожечь либо контроллер либо какой-нибудь девайс на шине. Мало ли кто там линию придавит.

Вся передача данных состоит из Стартовой посылки, битов и стоповой посылки. Порядок изменения уровня на шинах задает тип посылки.

После старта передача одного бита данных идет по тактовому импульсу.

То есть когда линия SCL в нуле master или slave выставляют бит на SDA (прижимают — если 0 или не прижимают — если 1 линию SDA) после чего SCL отпускается и master/slave считывают бит.

Таким образом, у нас протокол совершенно не зависит от временных интервалов, только от тактовых битов. Поэтому шину I2C очень легко отлаживать — если что то не так, то достаточно снизить скорость до байта в минуту и спокойно, обычными вольтметрами, смотреть что у нас происходит.

Правда это не прокатит с железным I2C, там нет таких низких скоростей. Но что нам мешает затактовать микроконтроллер от ОЧЕНЬ медленного тактового генератора и отладить все по шагам? 😉

Повторим для ясности:

  • Начало передачи определяется Start последовательностью — провал SDA при высоком уровне SCL
  • При передаче информации от Master к Slave, ведущий генерирует такты на SCL и выдает биты на SDA. Которые ведомый считывает когда SCL становится 1.
  • При передачи информации от Slave к Master, ведущий генерирует такты на SCL и смотрит что там ведомый творит с линией SDA — считывает данные. А ведомый, когда SCL уходит в 0, выставляет на SDA бит, который мастер считывает когда поднимет SCL обратно.
  • Заканчивается все STOP последовательностью. Когда при высоком уровне на SCL линия SDA переходит с низкого на высокий уровень.

То есть, изменение на шине данных в момент приема данных может быть только при низком уровне на SCL. Когда SCL вверху то идет чтение. Если же у нас SDA меняется при высоком SCL, то это уже служебные команды START или STOP.

Если Slave торомоз и не успевает (у EEPROM, например, низкая скорость записи), то он может насильно положить линию SCL в землю и не давать ведущему генерировать новые такты. Мастер должен это понять и дать слейву прожевать байт.

Так что нельзя тупо генерить такты, при отпускании SCL надо следить за тем, что линия поднялась. Если не поднялась, то надо остановиться и ждать до тех пор, пока Slave ее не отпустит. Потом продолжить с того же места.

Логический уровень
Как передаются отдельные биты понятно, теперь о том что эти биты значат. В отличии от SPI тут умная адресная структура. Данные шлются пакетами, каждый пакет состоит из девяти бит. 8 данных и 1 бит подтверждения/не подтверждения приема.

Первый пакет шлется от ведущего к ведомому это физический адрес устройства и бит направления.

Сам адрес состоит из семи бит (вот почему до 127 устройств на шине), а восьмой бит означает что будет делать Slave на следующем байте — принимать или передавать данные. Девятым битом идет бит подтверждения ACK.

Если Slave услышал свой адрес и считал полностью, то на девятом такте он придавит линию SDA в 0, сгенерировав ACK — то есть Понял! Мастер, заметя это, понимает, что все идет по плану и можно продолжать.

Если Slave не обнаружился, прозевал адрес, неправильно принял байт, сгорел или еще что с ним случилось, то, соответственно, SDA на девятом такте будет прижать некому и ACK не получится. Будет NACK. Мастер с горя хлопнет водки и прекратит свои попытки до лучших времен.

После адресного пакета идут пакеты с данными в ту или другую сторону, в зависимости от бита RW в заголовочном пакете.
Вот, например, Запись. В квадратиках идут номера битов. W=0

Чтение практически также, но тут есть одна тонкость из-за которой я когда то убил кучу времени. При приеме последнего байта надо дать ведомому понять, что в его услугах больше не нуждаемся и отослать NACK на последнем байте. Если отослать ACK то после стопа Master не отпустит линию — такой уж там конечный автомат.

Так что прием двух байтов будет выглядеть так (R=1):
Есть еще одно состояние, как повторный старт.
Это когда мы не обьявляя STOP вкатываем на шину еще один START. После него мы можем обратиться к другому устройству не освобождая шину.

Но чаще идет обращение к тому же самому устройству и это связано с особенностями организации памяти.

Организация памяти.
Это относится уже не столько к самому протоколу I2C, сколько к заморочкам создателей разных EEPROM и прочих I2C устройств.

Но встречается это повсеместно, поэтому я расскажу про этот момент. Но, повторюсь, это не аксиома, не стандарт и вообще зависит от конкретного Slave устройства.

Так что датит в зубы и вкуривать, но обычно так принято.

Итак, о чем речь.
Как видно из протокола, в первом байте мы адресовываем само устройство, а их может быть до 127 штук. Но в самом устройстве вполне может быть очень сложная структура, с кучей ячеек.

Читайте также:  Драйвер fxled компании issi управляет 144-мя полноцветными светодиодами в информационных дисплеях

Например EEPROM с килобайтами данных внутри. Как обращаться с этими данными? Не считывать же все по очереди от нуля до конца — это долго. Поэтому приняли хитрый формат.

Это не стандарт, но юзается повсеместно.

Поясню на примере:
Есть микросхема часов реального времени PCF8583 (я про нее еще напишу, следите за обновлениями), общающася по протоколу I2C. Внутри нее ячейки памяти, в которых хранятся часы, минуты, секунды, дата, состояние флагов и куча еще всего.

До кучи там еще 240 байт просто так, для свободного пользования. Карта адресов этой микросхемы выглядит так:

И вот надо мне установить дату. Для этого надо мне записать две ячейки памяти с адресами 0х05 и 0x06.

Как это сделать? Из даташита я узнаю, что первый байт данных это адрес куда мы будем обращаться, а потом уже идут данные и со следующим байтом счетчик адреса увеличивается на 1. Там же, в даташите, написано что эти часы откликаются на Slave-адрес 1010000х где х — состояние ноги А0 микросхемы.

Я эту ногу сразу посадил на 0 так что Slave-адрес у меня 10100000. Очевидно, что на одной шине может быть не более двух экземпляров этой микросхемы с адресами 10100000 и 10100001.

Задача решается так:
Вот и славно. Часы установлены и начали тикать. Но вот надо нам считать те же данные, а вдруг изменились?
С записью все понятно — записали вначале адрес, а потом следом записали данные. А умная микросхема все прекрасно поняла и рассовала по ячейкам. А с чтением? А с чтением все через задницу, в смысле через запись.

То есть, мы, вначале, записываем один байт — адрес. Потом делаем повторный старт, затем снова обращаемся к часам по ее Slave-адресу, но уже с битом R, на чтение.

И умная микруха выдает нам байты с адреса который мы в нее вот только что записали. Выглядит это так:
В этих часах так, у других микрух может быть все по другому, но в 99% очень похоже.

Адрес, например, может быть двухбайтным или страницу надо будет указать, но сути это не меняет. Цепочка запись-повстарт-чтение это повсеместно.
Вот так, кстати, выглядит чтение данных из часов PCF8583 на экране моего логического анализатора.

Тут не полная посылка (все 5 байт просто не влезли в экран), но тут четко видно запись начального адреса, потом повторный старт, и чтение из девайса.

Скриншот с осциллографа RIGOL 1042CD

Арбитраж шины I2C.
Почему то все мануалы для начинающих в которых рассматривалась тема протокола IIC как то ссыкливо замалчивают возможность работы двух ведущих на линии. Master-Slave и все тут.

А если у нас демократия? И каждый сам себе Master и сам себе Slave? Согласен, редкий случай, но тем не менее, описывать так описывать. Короче, в случае подобного садо-мазо варианта действует железное правило — кто раньше встал того и тапки. В смысле кто первый начал вещать тот и текущий Master.

Но вот случилось вообще невероятное — два Ведущих начали вещать одновременно. Прям совсем одновременно. Как быть? А тут нам поможет свойство монтажного И — где против лома нуля нет приема. Короче, оба мастера бит за битом играют в простую игру ножик-камень(1 и 0 соответственно). Кто первый выкинет камень против ножика тот и побеждает арбитраж, продолжая вещать дальше.

Так что очевидно, что самый важный адрес должен начинаться с нулей, чтобы тот кто к нему пытался обращаться всегда выигрывал арбитраж. Проигравшая же сторона вынуждена ждать пока шина не освободится.

Вроде бы все, практический пример с AVR будет потом, а пока помедитируйте над диаграммой работы конечного автомата TWI передатчика ATmega8. Скоро я вас буду этим грузить!

Страшна? 😉 На самом деле там все не так брутально. Можно обойтись вообще парой десятков строк кода на ассемблере.

UPD:

Источник: http://easyelectronics.ru/interface-bus-iic-i2c.html

полностью_Цифровой_усилитель ( ШИМ ) _VS._ ЦАП — Кто качественнее сегодня?!

?Шибаев Кирилл Алексеевич Shibaev Kirill Alexeevich (kshibaev) wrote,
2017-03-22 16:01:00=========================[мой реферат на тему]Итак.Хочешь что-то — сделай это САМ…В интернете , действительно, есть всё — надо только найти.Найти и..             ..

и систематизировать всё в одном месте. Т.к. в интернете вся эта информация присутсвует, но она размазана по разным местам по маленьким кусочкам — в одном месте упоминается одно , в другом другое , а общей картины нет. НО..

Но если собрать все эти кусочки в одном месте (файле) и затем отредактировать в единый информационный поток , то , то можно собрать из них полную картину (как паззл/puzzle) ,что я , собственно , и собираюсь сделать.Итак.

забив в поиске “полностью цифровой усилитель” сразу получаю практически полноценный ответ :

“полностью цифровой усилитель” ссылка 1 = http://www.diyaudio.ru/forum/index.php?topic=4078.0

цитата:Полностью цифровой усилитель

« : 06 Августа 2014, 11:47:55 »

Мучаю на макете полностью цифровой усилитель на техасском чипсете.Модулятор TAS5548, выходной каскад TAS5612LA.Вход многоканальный I2S,источник – компьютер,USB интерфейс – Фламенко.Управление модулятором пока от Arduino.В качестве РГ – энкодер.

Питание всего 12В, выходная микруля греется не сильно, даже не стал ставить радиатор.Мощности для акустики 84 Дб – за глаза.

“”””””””””””””””” конец цитаты “”””””””””””””””””===================================Первое что бросается в глаза — это , а что такое «I2S»

“что такое I2S” – ссылка Wi-Ki = https://ru.wikipedia.org/wiki/I%C2%B2S

кстати , не путать с I2С

“что такое I2С” – ссылка Wi-Ki = https://ru.wikipedia.org/wiki/I%C2%B2C

это две принципиально разные вещи , хотя звучит , точнее пишется очень похоже , и если не знать , что это разные вещи , то можно подумать , что это одно и тоже ; решив что , просто одни люди пишут так , другие так ; но это НЕ так — это разные – абсолютно две разные вещи.С этим разобрались.

Итак , нас интересует I2S , а не I2C.===================================Далее. I2S оказывается получается из USB и назвал он это устройство — Фламенко или Flamenco.забиваем в поиск и получаем ::

USB transport Flamenco в вопросах и ответах” = http://forum.vegalab.ru/showthread.

php?t=42288

“””””””””””””” Цитата “””””””””””””””Девайс позволяет выводить из компа                                              по шине USB                                                             звуковой поток в I2S                                                                                      до 24/96 или до 16/192                                                             с внешним тактированием от ЦАП                          и  управлять                                               посредством

                                                                    стандартного микшера ОС регулятором громкости Алексея Никитина на реле – до 7 разрядов (128 уровней).

Питание 5В/не более 90 мА. Возможно питание от USB компа (нужно просто установить джампер).

ссылка на видео в яндексе >ВИДЕО

Источник: https://kshibaev.livejournal.com/70470.html

Ссылка на основную публикацию
Adblock
detector