ikm 3 30 марта, 2017 Опубликовано 30 марта, 2017 · Жалоба Есть преобразователь SC18IM700 из UART to I2C, необходимо общаться с TAS5414B. Но возникли сложности при считывании регистров: В описании SC18 указано, что для считывания необходимо задать адрес ведомого и указать количество байт которые я ожидаю получить, но в инструкции на TAS5414 указано что помимо адреса надо еще указывать подадрес (регистры где необходимые значения), так вот как это сделать я чего то не пойму. Для режима записи вроде понятно, там после указания количества байт можно указывать инструкции что и куда записать. Вот правда проверить правильность не получается. SC18IM700.pdf tas5414b_q1.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 30 марта, 2017 Опубликовано 30 марта, 2017 · Жалоба Может режим "7.1.7 Repeated START: read after write" надо использовать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 3 30 марта, 2017 Опубликовано 30 марта, 2017 · Жалоба Может режим "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" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 27 30 марта, 2017 Опубликовано 30 марта, 2017 · Жалоба Вам надо разделить адресацию (в смысле понимания) для мастера и слейва. - Адресация по шине I2c - 7-битная, без всяких "подаресов". - Адресация регистров мастера - Адресация регистров слейва. Добейтесь четкого отрабатывания: - посылки адреса слейва - проверки ответа от него ACK (ответ только на "свой" адрес) Если это будет работать - можно двигать дальше. Судя по даташиту, ОНО должно работать из терминалки - так как команды ASCII. Также надо проверить инициализацию самого мастера (настройки его регистров) Обратите внимание на fifo - возможно надо делать операции подобные purge/drain fifo чтобы команда пошла на исполнение (как в PC так и в мастере). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 3 30 марта, 2017 Опубликовано 30 марта, 2017 · Жалоба Вам надо разделить адресацию (в смысле понимания) для мастера и слейва. - Адресация по шине 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-ий байт как значение количества байт которые он должен принять от слейва. Обратите внимание на fifo - возможно надо делать операции подобные purge/drain fifo Не совсем понял где делать эти операции? FIFO у м/сх 16 байт, что вполне хватает для команды чтения. Хм, поковырял еще немного вроде добился чтения вот такой командой, как раз как советовали read after write старт/адрес+бит записи/количество байт/регистр куда делать запись/рестарт/адрес+бит чтения/количество байт получаемых/стоп Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 30 марта, 2017 Опубликовано 30 марта, 2017 · Жалоба Хм, поковырял еще немного вроде добился чтения вот такой командой, как раз как советовали read after write старт/адрес+бит записи/количество байт/регистр куда делать запись/рестарт/адрес+бит чтения/количество байт получаемых/стоп Да, в фазу записи Вы указываете адрес устройства и как бы записываете субадрес откуда будете потом считывать второй фазой чтения (адрес устройства и байты для чтения). Это все без накладных указаний для SC18IM700. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Всем спасибо. Такой вопрос, если я буду делать это напрямую с Atmega, мне так же надо будет инициализировать сначала режим записи Или можно сразу обращаться как в описании TAS5414. : старт/адрес+бит чтения/регистр куда обращаюсь/рестарт/получаю ответ/стоп ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Да, это "стандартная" процедура для чтения из определенного регистра по I2C, обычно если продолжить читать дальше то данные будут идти со следующего адреса регистра т.е. будет автоматически инкрементироваться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ikm 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Да, это "стандартная" процедура для чтения из определенного регистра по I2C, обычно если продолжить читать дальше то данные будут идти со следующего адреса регистра т.е. будет автоматически инкрементироваться. Про инкримент счётчика регистра, я читал там описано, спасибо. Меня просто насторожил тот факт, что в описании последовательности команд уTI не указан конкретно какой бит выставлять на чтение или на запись при чтении и записи. До этого работал только с AD там по подробнее это описано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lagman 1 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Описано у них всё, просто надо в тексте внимательно смотреть, там прям так и написано бит записи в 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться