Плата-адаптер Arducam MIPI для USB3.0 Camera Shield
Общие сведения
Плата-адаптер Arducam MIPI для USB3 Camera Shield (UC-628 Rev.B) работает вместе с платой Arducam USB3.0 Camera Shield (UC-425 Rev.C) и позволяет принимать по USB 3.0 данные с камер MIPI.


Плата-адаптер Arducam MIPI для USB3.0 Camera Shield (UC-628 Rev.B)

Плата Arducam USB3.0 Camera Shield (UC-425 Rev.C)
Например, если подключить камеру OV9281 к плате-адаптеру MIPI и USB3.0 Camera Shield, получится такой комплект:

Связка из платы-адаптера MIPI (UC-628) и USB3.0 Camera Shield (UC-425) работает с разными камерами и с разными режимами одной камеры. Для этого в программе на ПК загружают разные конфигурационные файлы.


Конфигурационные файлы для платы-адаптера MIPI (UC-628) лежат на GitHub в репозитории ArduCAM_USB_Camera_Shield, в папке Config/USB3.0_UC-425_Rev.C+UC-628_Rev.B.

Как устроен конфигурационный файл
Разберём содержимое конфигурационного файла на примере ниже — так вам будет проще изменить его под свои задачи.

Комментарии
Строки, которые начинаются с «;» и «//», — комментарии.
Большой комментарий в начале конфигурационного файла описывает режим отображения, адрес камеры и другие способы настройки.

Иногда после настройки регистра камеры добавляют комментарий с назначением регистра.

Режим отображения и адрес камеры
Раздел, который начинается со строки [camera parameter], задаёт режим отображения и адрес камеры.

① CFG_MODE



CFG_MODE = 0: параметры можно менять в интерфейсе программы на ПК.
CFG_MODE = 1: параметры нельзя менять в интерфейсе программы на ПК.
② TYPE


TYPE обозначает модель камеры — для удобства просмотра.

③ SIZE



Если SIZE не совпадает с фактическим разрешением на выходе камеры, программа выдаст ошибку Bad frame received.

Чтобы в реальном времени видеть разрешение камеры MIPI, которое определяет CPLD, выберите Tools → Data Info.


④ BIT_WIDTH



Примечание:
- Режим MIPI RAW8: камера выдаёт 8 бит, BIT_WIDTH = 8 бит.
- Режим MIPI RAW10: камера выдаёт 10 бит. Программа на ПК пока не умеет разбирать RAW10, поэтому CPLD отбрасывает два младших бита и передаёт данные в 8-битном виде. BIT_WIDTH тоже равен 8 бит.
- Режим MIPI RAW12: на входе 12 бит. Программа на ПК пока не умеет разбирать RAW12, поэтому CPLD отбрасывает четыре младших бита и передаёт данные в 8-битном виде. BIT_WIDTH тоже равен 8 бит.
⑤ FORMAT



FORMAT = 0, 2 задаёт порядок GB — один из четырёх вариантов расположения цветов в RAW. Порядок можно также переключить в правом нижнем углу программы на ПК после загрузки конфигурационного файла.

⑥ I2C_MODE и I2C_ADDR



I2C_MODE = 2 означает, что камера работает по I2C с 16-битным адресом и 8-битными данными. I2C_ADDR = 0 × 6C — адрес сенсора на шине равен 0 × 6C.
Режим I2C и адрес сенсора смотрите в документации на сенсор или в других справочных материалах.


Настройка USB-прошивки и CPLD


[register parameter]: набор параметров регистров для режимов USB 2.0 и USB 3.0. [register parameter][dev2]: набор для режима USB 2.0. [register parameter][dev3][inf2]: набор для режима USB 3.0 при подключении к интерфейсу USB 2.0. [register parameter][dev3][inf3]: набор для режима USB 3.0 при подключении к интерфейсу USB 3.0.
Если USB3.0 Camera Shield подключена к порту USB 3.0, действуют обе секции — [register parameter] и [register parameter][dev3][inf3]. Более поздние настройки перезаписывают более ранние в порядке записи и загрузки.
Настройка USB-прошивки

VRCMD = 0xF6, 0x0000, 0x0000, 3, 0x03, 0x04, 0x0C
VRCMD = 0xF3, 0x0000, 0x0000, 0
VRCMD = 0xF9, 0x0001, 0x0000, 0 // 0x0001 is 16 bits; 0x0004 is 32 bits
Эти строки задают настройки прошивки USB 3.0, обычно их менять не нужно.
Настройка CPLD
На плате-адаптере MIPI для USB3.0 Camera Shield (UC-628) установлена CPLD, которая обрабатывает данные камеры.

Функции CPLD задаются настройкой регистров.

CPLD работает с 8-битными адресами и 8-битными данными.
① Число линий MIPI и формат RAW
VRCMD = 0xD7, 0x4600, 0x0C00, 1, 0x81

- Интерфейс MIPI может работать с 1, 2 или 4 линиями.
- Поддерживаются три формата RAW: RAW8, RAW10 и RAW12 (другие форматы RAW пока не поддерживаются).
| Число линий | Формат RAW | Значение 0 × 0C |
|---|---|---|
| 1 | RAW8 | 0 × 80 |
| 2 | RAW8 | 0 × 81 |
| 4 | RAW8 | 0 × 82 |
| 1 | RAW10 | 0 × 90 |
| 2 | RAW10 | 0 × 91 |
| 4 | RAW10 | 0 × 92 |
| 1 | RAW12 | 0xA0 |
| 2 | RAW12 | 0xA1 |
| 4 | RAW12 | 0xA2 |
② Опорное значение разрешения MIPI
VRCMD = 0xD7, 0x4600, 0x0D00, 1, 0x0A
VRCMD = 0xD7, 0x4600, 0x0E00, 1, 0x20
VRCMD = 0xD7, 0x4600, 0x0F00, 1, 0x07
VRCMD = 0xD7, 0x4600, 0x1000, 1, 0x98

Регистры 0 × 0D–0 × 10 задают опорное значение разрешения. Они учитываются, только если включена проверка WordCount для разрешения MIPI (bit[2] регистра 0 × 11).
- Если в 0 × 11 записано 0 × 03, проверка WordCount выключена и значения 0 × 0D–0 × 10 можно не задавать.
- Если в 0 × 11 записано 0 × 07, значения 0 × 0D–0 × 0E должны быть верными, иначе CPLD не сможет выделить HREF и программа на ПК не выведет изображение.
③ Проверка данных MIPI
VRCMD = 0xD7, 0x4600, 0x1100, 1, 0x07
Регистр 0 × 11 включает несколько видов проверки данных MIPI (DataID, WordCount, ECC).
Любой пакет MIPI — и короткий (начало и конец кадра), и длинный (строка данных) — содержит поля DataID, WordCount и ECC.


DataID состоит из VC (виртуальный канал) и DT (DataType, тип данных).

VC обычно не используется; из типов данных DT чаще всего встречаются RAW8 и RAW10.



bit[1]включает проверку DataType. При значении 1 разбираются только данные MIPI в форматах RAW8 (DataType = 0 × 2A), RAW10 (DataType = 0 × 2B) и RAW12 (DataType = 0 × 2C).bit[2]включает проверку WordCount. При значении 1 данные MIPI разбираются, только если WordCount совпадает со значением в 0 × 0D–0 × 0E.bit[5:4]задают порядок вычисления ECC. ECC вычисляется по трём байтам — DI, WC_H и WC_I, и при разном порядке значения ECC получаются разными.
У большинства камер этот порядок настраивается; по умолчанию обычно используется DI, WC_I, WC_H.

Общие рекомендации:
- Для 2 и 4 линий достаточно включить проверки ECC и DataType, проверку WordCount можно не включать. То есть в регистр 0 × 11 записывается 0 × 03, а регистры 0 × 0D–0 × 10 можно не задавать.
VRCMD = 0xD7, 0x4600, 0x1100, 1, 0x03
- Для 1 линии нужно включить проверку WordCount, иначе разбор данных может быть нестабильным. То есть в регистр 0 × 11 записывается 0 × 07, а регистры 0 × 0D–0 × 10 нужно задать по фактическому разрешению. Если разрешение задано неверно, CPLD не сможет выделить HREF и программа на ПК не выведет изображение.
Например, настройка OV7251 для 1 линии и RAW8:

Настройка камеры



[register parameter]: набор параметров регистров для режимов USB 2.0 и USB 3.0. [register parameter][dev2]: набор для режима USB 2.0. [register parameter][dev3][inf2]: набор для режима USB 3.0 при подключении к интерфейсу USB 2.0. [register parameter][dev3][inf3]: набор для режима USB 3.0 при подключении к интерфейсу USB 3.0.
Если USB3.0 Camera Shield подключена к порту USB 3.0, действуют обе секции — [register parameter] и [register parameter][dev3][inf3]. Более поздние настройки перезаписывают более ранние в порядке записи и загрузки.
В некоторых конфигурационных файлах есть большой раздел из строк, которые начинаются с «VRCMD =». Он настраивает старые платы-адаптеры MIPI (UC-489 Rev.C). Его оставляют для совместимости старых и новых моделей, но на новую плату-адаптер MIPI (UC-628) он не действует.

Например:
REG = 0x3035, 0x11— 16-битный адрес и 8-битные данные.- Сначала правильно задайте I2C_MODE и I2C_ADDR в начале конфигурационного файла.

Конкретные настройки камеры берите из даташита. Чаще всего настраивают регистры PLL, VTS/HTS, экспозиции, усиления, режима RAW и т. д.




Примеры правки
Ниже — несколько примеров того, как править конфигурационный файл.
Переход с RAW8 на RAW10
Возьмём для примера файл OV5647_MIPI_2Lane_RAW8_8b_2592x1944_8fps.cfg и переделаем его под режим «2 линии, RAW10, 2592 × 1944»: число линий и разрешение остаются прежними, меняется только формат RAW.
Сначала скопируйте файл OV5647_MIPI_2Lane_RAW8_8b_2592x1944_8fps.cfg.

Затем переименуйте копию.

Откройте её в текстовом редакторе (например, Notepad++).
Камера и разрешение не меняются, поэтому раздел [Camera parameter] править не нужно.

В настройках CPLD измените значение регистра 0 × 0C с 0 × 81 на 0 × 91.

| Число линий | Формат RAW | Значение 0 × 0C |
|---|---|---|
| 1 | RAW8 | 0 × 80 |
| 2 | RAW8 | 0 × 81 |
| 4 | RAW8 | 0 × 82 |
| 1 | RAW10 | 0 × 90 |
| 2 | RAW10 | 0 × 91 |
| 4 | RAW10 | 0 × 92 |
| 1 | RAW12 | 0xA0 |
| 2 | RAW12 | 0xA1 |
| 4 | RAW12 | 0xA2 |
Найдите в документации на камеру регистр, который задаёт формат RAW.

Формат RAW задаёт регистр 0 × 3034. Значение по умолчанию 0 × 1A означает RAW10, значение 0 × 18 — RAW8.
Найдите 0 × 3034 в конфигурационном файле. Он встречается в двух местах, действует последнее.

Текущее значение 0 × 3034 — 0 × 18, замените его на 0 × 1A.
Сохраните изменённый файл.
Нажмите refresh — в выпадающем списке появится только что созданный файл.

Нажмите по очереди load → open → play — появится нормальное изображение.

Выберите Tools → Data Info.


CPLD определила DataType 0 × 2B — значит, данные действительно в формате RAW10.

- Если после перехода с RAW8 на RAW10 программа на ПК выдаёт ошибку
badframe, возможно, объём данных в строке вырос в 1,25 раза, а HTS слишком мал. Увеличьте HTS, чтобы получить изображение. При переходе с RAW10 на RAW8 HTS менять не нужно. - У некоторых камер при смене формата RAW нужно изменить и регистры PLL.
- Программа на ПК пока не умеет разбирать RAW10, поэтому CPLD на USB2.0 Camera Shield Rev.E отбрасывает два младших бита и передаёт данные в 8-битном виде. Поэтому BIT_WIDTH задаётся равным 8 бит; для RAW12 — тоже 8 бит.
Как определить формат RAW и разрешение
Ниже показано, как исправить конфигурационный файл, если число линий известно, а формат RAW и точное разрешение — нет. Предполагается, что камера выдаёт данные нормально и под вопросом только настройка USB2 Camera Shield.
Снова возьмём для примера файл OV5647_MIPI_2Lane_RAW8_8b_2592x1944_8fps.cfg.
Сначала скопируйте файл OV5647_MIPI_2Lane_RAW8_8b_2592x1944_8fps.cfg и дальше работайте с копией.

Откройте её в текстовом редакторе (например, Notepad++).
Для примера намеренно укажем неверный SIZE: 2500,1900 вместо 2592,1944.

Так же намеренно ошибёмся в регистре 0 × 0C: изменим 0 × 81 на 0 × 91.

Программа на ПК загружает этот файл и выдаёт ошибку Bad frame received.

Сведения о данных MIPI тоже неверные.

Теперь измените значение регистра 0 × 11 с 0 × 07 (или 0 × 03) на 0 × 01.

Сохраните файл, загрузите его заново и снова откройте окно Data Info.

0 × 2A означает RAW8, разрешение — 2592 × 1944.

Теперь исправьте конфигурационный файл:
- верните SIZE = 2592,1944;
- запишите в 0 × 11 значение 0 × 03;
- запишите в 0 × 0C значение 0 × 81.
Изображение выводится нормально.
Col в окне Data Info — уже не число столбцов, а длина строки в байтах (WordCount). Например, на рисунке ниже — результат для конфигурации RAW10 после записи 0 × 01 в 0 × 11. Значение 0 × 2B означает RAW10, а объём данных RAW10 в 1,25 раза больше, чем RAW8, поэтому число столбцов — 3240 / 1,25 = 2592. Другой путь: сначала исправьте 0 × 11 и 0 × 0C (0 × 11 = 0 × 03, 0 × 0C = 0 × 91), затем посмотрите сведения в окне Data Info — Col и Row теперь будут точными — и в конце исправьте SIZE.
