29.09.2023, 17:09
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
16 битный регистр i2c
Здравствуйте.
Есть такая малоизвестная камера ARX3A0_MIPI. Производители видимо в силу политических особенностей отказались предоставлять какую либо документацию на нее.
Кое как у китайцев получилось достать перечень регистров камеры.
И выяснилось что регистры имеют 16 битный адрес.
Цитата:
|
REG= 0x0300, 0x000A // VT_PIX_CLK_DIV
REG= 0x0302, 0x0001 // VT_SYS_CLK_DIV
REG= 0x0304, 0x0101 // PRE_PLL_CLK_DIV
REG= 0x0306, 0x2828 // PLL_MULTIPLIER
REG= 0x0308, 0x000A // OP_PIX_CLK_DIV
REG= 0x030A, 0x0001 // OP_SYS_CLK_DIV
REG= 0x31B0, 0x0047 // FRAME_PREAMBLE
REG= 0x31B2, 0x0026 // LINE_PREAMBLE
REG= 0x31B4, 0x328C // MIPI_TIMING_0
REG= 0x31B6, 0x32E8 // MIPI_TIMING_1
REG= 0x31B8, 0x1C12 // MIPI_TIMING_2
REG= 0x31BA, 0x1452 // MIPI_TIMING_3
REG= 0x31BC, 0x8488 // MIPI_TIMING_4
|
Если я конечно правильно понял.
ПЛИС использую GW2AR-LV18EQ144C8/I7 у него i2c аппаратный но 8 битный.
Пытался погуглить 16 битные регистры но гугл выдает что то странное.
Вообще это нормальный режим i2c ?? Есть у кого нибудь мануал как к этому обращаться? диаграмма какая нибудь.
И можно ли вообще с помощью 8 битного i2c обратиться к этим регистрам??
|
|
|
|
29.09.2023, 17:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,352
Сказал спасибо: 85
Сказали Спасибо 611 раз(а) в 370 сообщении(ях)
|
Судя по регистрам, это матрица Aptina MT9J001 или ее дальнейшее развитие.
Лет 10 назад делал на ней видеокамеру. Управлял сначала каким-то LPC, потом STM32. Правда матрица у меня была с параллельным интерфейсом, но в данном случае это не важно.
Проблем не возникло.
Во вложении даташит и описание регистров.
Адрес и данные все равно передаются побайтно, недаром адреса регистров все чётные.
Так что режим I2C тут полностью стандартный, насколько помню.
На стр. 23 даташита описание I2C.
Цитата:
|
Each 8-bit data transfer is followed by an acknowledge bit or a no-acknowledge bit in the
SCLK clock period following the data transfer. The transmitter (which is the master when
writing, or the slave when reading) releases SDATA. The receiver indicates an acknowledge
bit by driving SDATA LOW. As for data transfers, SDATA can change when SCLK is
LOW and must be stable while SCLK is HIGH.
|
Кстати, обратите внимание - регистры там есть как 16 битные (большинство), так и 8 битные (например, mode_select - Rx0100). Адресация 8-ми битных также бывает и нечетной.
Последний раз редактировалось mike-y-k; 29.09.2023 в 22:08.
Причина: 6.6
|
|
|
Сказали "Спасибо" pambaru
|
|
|
29.09.2023, 17:44
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: 16 битный регистр i2c
Вот вам спасибо огромнейшее. Мы тут месяц бьемся с этими производителями. то им почта не та, то NDA подпишите .. слов нет. А в итоге ваш президент бяка и поэтому даташит не получите. Цивилизованный мир называется... (((
А примера какого нибудь по настройке нет часом?? хотя бы просто включить чтобы пошли данные на мипи.
|
|
|
|
29.09.2023, 17:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,352
Сказал спасибо: 85
Сказали Спасибо 611 раз(а) в 370 сообщении(ях)
|
Я запускал тогда параллельный интерфейс. На обработке у меня стоял 3-й циклон. Нашел еще тогда недокументированный глючок.
Вот какие записи сохранились:
Код:
|
В тексте WriteCamReg8 - запись 8-мибитного регистра матрицы,
WriteCamReg16 - запись 16-тибитного регистра матрицы,
Проблема выявилась на матрицах с параллельным интерфейсом MT9J003I12STCU.
Конфигурируем PLL и конфигурируем матрицу для параллельного интерфейса
WriteCamReg8(mode_select, 0); // 0
WriteCamReg16(pre_pll_clk_div, 2); // 1
WriteCamReg16(pll_multiplier, 64); // 2
WriteCamReg16(vt_sys_clk_div, 1); // 3
WriteCamReg16(vt_pix_clk_div, 6); // 4
WriteCamReg16(op_sys_clk_div, 1); // 5
WriteCamReg16(op_pix_clk_div, 12); // 6
//Без строки 7 на выходе выдает только 1/4 часть данных!!!
WriteCamReg16(serial_format /* 0x31AE */, 0x301); // 7 нужно для правильной работы !!!!
WriteCamReg16(reset_register, 0x1798); // 8
//строчки 9 и 10 не важны, это для конкретной схемы включения, можно без них.
WriteCamReg16(gpi_status //* 0x301A *//, ((2 ‹‹ 13) | (0 ‹‹ 10) | (1 ‹‹ 7) | (7 ‹‹ 4))); // 9
WriteCamReg16(global_seq_trigger, 0x0002); //10
WriteCamReg8(mode_select, 1); //11
Если убрать строчку 7, то на выходе будет только четверть данных (каждый четвертый пиксель).
регистр serial_format /* 0x31AE */ даже не значится в списке регистров и по идее не должен влиять на работу в параллельном режиме. |
Вот еще DevSuite (софт от Аптины).
Что точно помню, что она вычисляет корректирующие коэффициенты для изображения по изображению белого фона.
Возможно, там есть еще что-то полезное - уже не вспомню.
Во вложении фрагмент из моего кода, относящийся к конфигурированию матрицы (напомню, что у меня был параллельный режим).
Чтобы помочь как-то более продуктивно, надо уже погружаться в тему и вспоминать, что там было. Но это уже не на безвозмездной основе.
Если вдруг возникнет потребность - пишите в личку.
Последний раз редактировалось mike-y-k; 29.09.2023 в 22:09.
Причина: 6.6
|
|
|
|
29.09.2023, 18:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,841
Сказал спасибо: 2,723
Сказали Спасибо 2,674 раз(а) в 1,978 сообщении(ях)
|
Re: 16 битный регистр i2c
worldmasters, Вы бы определились, что Вам нужно - обращаться к регистрам по 16-битному адресу или пересылать из/в них 16-битную информацию - и корректно назвали бы тему.
А по существу вопроса - https://stackoverflow.com/questions/...s-using-i2cset - сможет помочь? (там и адрес похожий...)
Вот еще: https://forums.raspberrypi.com/viewtopic.php?t=17590
Сообщение от worldmasters
|
Пытался погуглить 16 битные регистры но гугл выдает что то странное.
|
запрос "16-byte addressing I2c" сразу же выдал эти ссылки...
Как тут не раз говорилось - правильно заданный вопрос содержит...
Последний раз редактировалось Yuri222; 29.09.2023 в 18:31.
|
|
|
Сказали "Спасибо" Yuri222
|
|
|
03.10.2023, 10:12
|
|
Гражданин KAZUS.RU
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
|
Re: 16 битный регистр i2c
Сообщение от Yuri222
|
обращаться к регистрам по 16-битному адресу или пересылать из/в них 16-битную информацию
|
Все верно.
В общем все заработало. Регистры читаются. Всем спасибо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:17.
|
|