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

 
 
 
Reply to this topicStart new topic
> Помогите "подружить" по I2C два устройства, SC18IM700 + TAS5414B
ikm
сообщение Mar 30 2017, 09:42
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Есть преобразователь SC18IM700 из UART to I2C, необходимо общаться с TAS5414B.
Но возникли сложности при считывании регистров:
В описании SC18 указано, что для считывания необходимо задать адрес ведомого и указать количество байт которые я ожидаю получить, но в инструкции на TAS5414 указано что помимо адреса надо еще указывать подадрес (регистры где необходимые значения), так вот как это сделать я чего то не пойму.
Для режима записи вроде понятно, там после указания количества байт можно указывать инструкции что и куда записать. Вот правда проверить правильность не получается.
Прикрепленные файлы
Прикрепленный файл  SC18IM700.pdf ( 118.99 килобайт ) Кол-во скачиваний: 16
Прикрепленный файл  tas5414b_q1.pdf ( 2.08 мегабайт ) Кол-во скачиваний: 19
 


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 30 2017, 11:51
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Может режим "7.1.7 Repeated START: read after write" надо использовать
Go to the top of the page
 
+Quote Post
ikm
сообщение Mar 30 2017, 12:53
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(Lagman @ Mar 30 2017, 14:51) *
Может режим "7.1.7 Repeated START: read after write" надо использовать

Его тоже пробовал: Сигнала на выходе SC18 вообще нет. Причем режим Repeated START: write after write вроде как проходит, но для записи в TAS5414.
Может я нет так составляю последовательность команд, но если у Вас есть конкретный вариант, то пиши сразу попробую.
Я делал так:
53 D9 xx 50 получаешь хх байт, значения которых всё время разные.
53 D9 01 53 D9 0C 50 на выходе SC18 тихо, наверное не поддерживает режим "read after read"


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
k155la3
сообщение Mar 30 2017, 14:11
Сообщение #4


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Вам надо разделить адресацию (в смысле понимания) для мастера и слейва.
- Адресация по шине I2c - 7-битная, без всяких "подаресов".
- Адресация регистров мастера
- Адресация регистров слейва.
Добейтесь четкого отрабатывания:
- посылки адреса слейва
- проверки ответа от него ACK (ответ только на "свой" адрес)
Если это будет работать - можно двигать дальше.

Судя по даташиту, ОНО должно работать из терминалки - так как команды ASCII.
Также надо проверить инициализацию самого мастера (настройки его регистров)
Обратите внимание на fifo - возможно надо делать операции подобные purge/drain fifo
чтобы команда пошла на исполнение (как в PC так и в мастере).
Go to the top of the page
 
+Quote Post
ikm
сообщение Mar 30 2017, 14:58
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(k155la3 @ Mar 30 2017, 17:11) *
Вам надо разделить адресацию (в смысле понимания) для мастера и слейва.
- Адресация по шине I2c - 7-битная, без всяких "подаресов".
- Адресация регистров мастера
- Адресация регистров слейва.
Добейтесь четкого отрабатывания:
- посылки адреса слейва
- проверки ответа от него ACK (ответ только на "свой" адрес)
Если это будет работать - можно двигать дальше.

Судя по даташиту, ОНО должно работать из терминалки - так как команды ASCII.
Также надо проверить инициализацию самого мастера (настройки его регистров)
Обратите внимание на fifo - возможно надо делать операции подобные purge/drain fifo
чтобы команда пошла на исполнение (как в PC так и в мастере).

Так я из терминалки сейчас и мучаю его.
До регистров мастера достучатся не проблема, там всё четко.
Чуть выше я не верно описал последовательно команд.
Было так: старт/адрес слейва+чтение/количество принимаемых байт/регистры ведомого (0С)/конец пакета это из описания на SC18
53 D9 01 0С 50
Из описания на слейв должно выглядеть так: старт/адрес слейва+чтение/регистры ведомого (0С)/рестарт/количество принимаемых байт//конец пакета
53 D9 0C 53 D9 01 50
Как я писал ранее Если послать слейву команду 53 D9 01 50, то я получу один байт в ответ, если 53 D9 0А 50 то соответвенно 10 байт в ответе. Но значения байтов в этих ответах всё время разные. На другие адреса слейв не отвечает.
Отсюда следует, что мастер воспринимает 3-ий байт как значение количества байт которые он должен принять от слейва.
Цитата(k155la3 @ Mar 30 2017, 17:11) *
Обратите внимание на fifo - возможно надо делать операции подобные purge/drain fifo

Не совсем понял где делать эти операции? FIFO у м/сх 16 байт, что вполне хватает для команды чтения.

Хм, поковырял еще немного вроде добился чтения вот такой командой, как раз как советовали read after write старт/адрес+бит записи/количество байт/регистр куда делать запись/рестарт/адрес+бит чтения/количество байт получаемых/стоп


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 30 2017, 20:37
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Цитата(ikm @ Mar 30 2017, 17:58) *
Хм, поковырял еще немного вроде добился чтения вот такой командой, как раз как советовали read after write старт/адрес+бит записи/количество байт/регистр куда делать запись/рестарт/адрес+бит чтения/количество байт получаемых/стоп

Да, в фазу записи Вы указываете адрес устройства и как бы записываете субадрес откуда будете потом считывать второй фазой чтения (адрес устройства и байты для чтения). Это все без накладных указаний для SC18IM700.
Go to the top of the page
 
+Quote Post
ikm
сообщение Mar 31 2017, 08:18
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Всем спасибо.
Такой вопрос, если я буду делать это напрямую с Atmega, мне так же надо будет инициализировать сначала режим записи Или можно сразу обращаться как в описании TAS5414. : старт/адрес+бит чтения/регистр куда обращаюсь/рестарт/получаю ответ/стоп ?


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 31 2017, 11:07
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Да, это "стандартная" процедура для чтения из определенного регистра по I2C, обычно если продолжить читать дальше то данные будут идти со следующего адреса регистра т.е. будет автоматически инкрементироваться.
Go to the top of the page
 
+Quote Post
ikm
сообщение Mar 31 2017, 11:18
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 891
Регистрация: 25-12-06
Из: С-Пб
Пользователь №: 23 894



Цитата(Lagman @ Mar 31 2017, 14:07) *
Да, это "стандартная" процедура для чтения из определенного регистра по I2C, обычно если продолжить читать дальше то данные будут идти со следующего адреса регистра т.е. будет автоматически инкрементироваться.

Про инкримент счётчика регистра, я читал там описано, спасибо.
Меня просто насторожил тот факт, что в описании последовательности команд уTI не указан конкретно какой бит выставлять на чтение или на запись при чтении и записи. До этого работал только с AD там по подробнее это описано.


--------------------
ОБХОДЯ РАЗЛОЖЕННЫЕ ГРАБЛИ - ТЫ ТЕРЯЕШЬ ДРАГОЦЕННЫЙ ОПЫТ!!!
Go to the top of the page
 
+Quote Post
Lagman
сообщение Mar 31 2017, 15:17
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 875
Регистрация: 28-10-05
Пользователь №: 10 245



Описано у них всё, просто надо в тексте внимательно смотреть, там прям так и написано бит записи в 0 и бит чтения в 1, только на картинках не понятно.
Цитата
As shown in Figure 16, a single-byte data-read transfer begins with the master device transmitting a start
condition followed by the I2C device address and the read/write bit. For the data-read transfer, both a write
followed by a read are actually done. Initially, a write is done to transfer the address byte or bytes of the internal
memory address to be read. As a result, the read/write bit is a 0. After receiving the address and the read/write
bit, the TAS5414B-Q1 or TAS5424B-Q1 responds with an acknowledge bit. In addition, after sending the internal
memory address byte or bytes, the master device transmits another start condition followed by the
TAS5414B-Q1 or TAS5424B-Q1 address and the read/write bit again. This time the read/write bit is a 1,
indicating a read transfer.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:15
Рейтинг@Mail.ru


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