Плата USB2.0 Camera Shield Rev.E
Общие сведения
В этом разделе описана работа с платой Arducam USB2 Camera Shield. Главное в новой ревизии USB2.0 Camera Shield Rev.E — поддержка сенсоров с интерфейсом MIPI без отдельной платы-адаптера MIPI.
На плате есть аппаратный буфер кадров на 16 МБ. Он снимает проблемы с пропускной способностью и потерей кадров, которые возникают при программной буферизации. Кроме того, встроенный буфер позволяет синхронизировать несколько камер, чтобы они снимали точно в один момент.
Плата работает как с ПК, так и со встраиваемыми системами вроде Raspberry Pi. Для Odroid, Beaglebone Black и плат NVIDIA Jetson TK/TX возможна поддержка под заказ.

Аппаратная часть
Подключение
Рисунок 1. Схема интерфейсов платы:


Рисунок 2. Габаритные размеры платы Arducam USB2 Camera Shield.
На плате два разных интерфейса для камер, но одновременно можно использовать только один из них.
Интерфейс камеры MIPI
Интерфейс MIPI служит для подключения отладочных плат камер MIPI с разъёмом на 22 контакта. Полный список совместимых камер — в разделе «Поддерживаемые модули камер».

Таблица 1. Назначение выводов разъёма P1
| № вывода | Название | Тип | Описание |
|---|---|---|---|
| 1 | GND | Земля | Общий провод питания |
| 2 | D0_N | Вход | MIPI DATA0 N |
| 3 | D0_P | Вход | MIPI DATA0 P |
| 4 | GND | Земля | Общий провод питания |
| 5 | D1_N | Вход | MIPI DATA1 N |
| 6 | D1_P | Вход | MIPI DATA1 P |
| 7 | GND | Земля | Общий провод питания |
| 8 | C_N | Вход | MIPI CLOCK N |
| 9 | C_P | Вход | MIPI CLOCK P |
| 10 | GND | Земля | Общий провод питания |
| 11 | D2_N | Вход | MIPI DATA2 N |
| 12 | D2_P | Вход | MIPI DATA2 P |
| 13 | GND | Земля | Общий провод питания |
| 14 | D3_N | Вход | MIPI DATA3 N |
| 15 | D3_P | Вход | MIPI DATA3 P |
| 16 | GND | Земля | Общий провод питания |
| 17 | PWEN | Выход | Включение питания MIPI (активный высокий уровень) |
| 18 | VCC | Питание | Питание 3,3 В |
| 19 | GND | Земля | Общий провод питания |
| 20 | SCL | Вход | Тактовый сигнал двухпроводного последовательного интерфейса |
| 21 | SDA | Двунаправленный | Данные двухпроводного последовательного интерфейса (ввод-вывод) |
| 22 | VCC | Питание | Питание 3,3 В |

Интерфейс DVP служит для подключения отладочных плат камер со шлейфом на 30 контактов. Полный список совместимых камер — в разделе «Поддерживаемые модули камер».
Таблица 2. Назначение выводов разъёма HDC1
| № вывода | Название | Тип | Описание |
|---|---|---|---|
| 1 | GND | Земля | Общий провод питания |
| 2 | NC | - | - |
| 3 | Trigger | Выход | Вход синхронизации экспозиции |
| 4 | VSYNC | Вход | Активный высокий уровень: кадр действителен (активный кадр) |
| 5 | HREF | Вход | Активный высокий уровень: строка или данные действительны (активные пиксели) |
| 6 | DOUT11 | Вход | Выход данных пикселя 11 (старший бит) |
| 7 | DOUT10 | Вход | Выход данных пикселя 10 |
| 8 | DOUT9 | Вход | Выход данных пикселя 9 |
| 9 | DOUT8 | Вход | Выход данных пикселя 8 |
| 10 | DOUT7 | Вход | Выход данных пикселя 7 |
| 11 | DOUT6 | Вход | Выход данных пикселя 6 |
| 12 | DOUT5 | Вход | Выход данных пикселя 5 |
| 13 | GND | Земля | Общий провод питания |
| 14 | DOUT4 | Вход | Выход данных пикселя 4 |
| 15 | DOUT3 | Вход | Выход данных пикселя 3 |
| 16 | DOUT2 | Вход | Выход данных пикселя 2 |
| 17 | DOUT1 | Вход | Выход данных пикселя 1 |
| 18 | DOUT0 | Вход | Выход данных пикселя 0 (младший бит) |
| 19 | NC | - | - |
| 20 | PCLK | Вход | Тактовый сигнал пикселей от сенсора |
| 21 | SCL | Вход | Тактовый сигнал двухпроводного последовательного интерфейса |
| 22 | SDA | Двунаправленный | Данные двухпроводного последовательного интерфейса (ввод-вывод) |
| 23 | RST_N | Выход | Сброс сенсора, активный низкий уровень |
| 24 | GND | Земля | Общий провод питания |
| 25 | GND | Земля | Общий провод питания |
| 26 | STANDBY | Выход | Включение режима ожидания (активный высокий уровень) |
| 27–30 | VCC | Питание | Питание 3,3 В |
Установка драйвера
Плата Arducam USB Camera Shield — не стандартное устройство UVC (USB Video Class). Она работает через собственный драйвер для фирменных SDK и API Arducam, которые дают доступ ко всем функциям сенсора на уровне регистров. Как установить драйвер, читайте в разделе «Установка драйвера в Windows».
Примеры программ
Arducam выпускает библиотеку SDK и API для C++ и Python, а также графическую программу (GUI) для Windows, которая помогает разобраться в работе USB-камеры Arducam и библиотеки SDK. Как запустить пример, читайте в разделе «SDK и API».
Таблица регистров
| Адрес регистра | Доступ | UC-391 Rev.E (USB 2.0) |
|---|---|---|
| 0 × 00 | только чтение | bit[7:0]: номер версии CPLD; для UC-391 Rev.E — 0 × 25 |
| 0 × 01 | чтение и запись | bit[7]: разрядность камеры DVP: 0 — 8 бит; 1 — 16 бит. bit[5]: полярность pclk камеры DVP: 0 — обычная; 1 — инверсная. bit[4]: ИК-фильтр (ircut): 0 — включён; 1 — выключен. bit[3]: режим ожидания камеры DVP: 0 — обычный режим; 1 — ожидание. bit[2]: rst_n камеры DVP: 0 — сброс; 1 — обычный режим. bit[1]: режим ожидания камеры MIPI: 0 — обычный режим; 1 — ожидание. bit[0]: rst_n камеры MIPI: 0 — сброс; 1 — обычный режим |
| 0 × 02 | чтение и запись | bit[8]: вывод внешнего запуска камеры DVP, подключённый к CPLD, работает как вход или выход CPLD: 0 — вход CPLD; 1 — выход CPLD. bit[4]: вид внутренних тестовых данных: 0 — цветные полосы; 1 — счётчик. bit[2]: источник данных: 0 — данные камеры; 1 — тестовые данные. bit[0]: полярность vsyn камеры DVP: 0 — обычная; 1 — инверсная |
| 0 × 03 | чтение и запись | bit[7]: сброс CPLD: 0 — обычный режим; 1 — сброс (запишите 1, затем снова 0). bit[6]: пауза приёма данных с камеры: 0 — обычный режим; 1 — пауза. bit[5]: однократный снимок (действует только при bit[6] = 1): 0 — ожидание; 1 — сделать один снимок (запишите 1, затем снова 0) |
| 0 × 04 | чтение и запись | bit[7:0]: пропуск кадров. Входной поток кадров может превышать пропускную способность USB 2.0, поэтому число передаваемых кадров можно уменьшить, пропуская часть из них. M = bit[7:4], N = bit[3:0]: из каждых N кадров передаются M. 0 × 00 — без пропуска; 0 × 01 — пропуск 1 кадра, то есть 1/2 (для совместимости с Rev.C); 0 × 11 — без пропуска; 0 × 12 — 1/2; 0 × 13 — 1/3; … 0 × 1F — 1/15 |
| 0 × 05 | только чтение | bit[7:0]: год версии CPLD. Например, для десятичного значения 19 программа на хосте прибавляет 2000 — получается 2019 |
| 0 × 06 | только чтение | bit[7:0]: месяц версии CPLD. Например, десятичное 08 — август |
| 0 × 07 | только чтение | bit[7:0]: день версии CPLD. Например, десятичное 03 — 3-е число |
| 0 × 08 | чтение и запись | bit[7]: передача данных в USB: 0 — обычный режим; 1 — остановить передачу. bit[0]: сброс хостом флага завершения однократного снимка: 0 — не сбрасывать; 1 — сбросить (запишите 1, затем снова 0) |
| 0 × 09 | только чтение | bit[0]: флаг завершения однократного снимка: 0 — не завершён; 1 — завершён |
| 0 × 0A | чтение и запись | bit[1:0]: выбор разрядов данных камеры DVP (входные данные — 12 бит). Режим 8 бит: 0 — dvp_data[11:4]; 1 — dvp_data[9:2]; 2 — dvp_data[7:0]. Режим 16 бит: 0 — {4'd0, dvp_data[11:0]}; 1 — {6'd0, dvp_data[9:0]} |
| 0 × 0B | ||
| 0 × 0C | чтение и запись | bit[7]: выбор камеры: 0 — камера DVP; 1 — камера MIPI. bit[4]: формат MIPI RAW: 0 — raw8; 1 — raw10. bit[1:0]: число линий MIPI: 0 — 1 линия; 1 — 2 линии; 2 — 4 линии |
| 0 × 0D | чтение и запись | MIPI, разрешение изображения, столбцы, старшие 8 бит |
| 0 × 0E | чтение и запись | MIPI, разрешение изображения, столбцы, младшие 8 бит |
| 0 × 0F | чтение и запись | MIPI, разрешение изображения, строки, старшие 8 бит |
| 0 × 10 | чтение и запись | MIPI, разрешение изображения, строки, младшие 8 бит |
| 0 × 11 | чтение и запись | bit[5:4]: режим проверки ECC: 3 — {DI, WC_I, WC_H}; 2 — {DI, WC_H, WC_I}; 1 — {WC_I, WC_H, DI}; 0 — {WC_H, WC_I, DI}. bit[2]: проверка WC для MIPI HREF: 0 — без проверки; 1 — проверять. bit[1]: проверка data_type (raw8 или raw10): 0 — без проверки; 1 — проверять. bit[0]: проверка MIPI ECC: 0 — без проверки; 1 — проверять |
| 0 × 12 | чтение и запись | bit[7]: два дополнительных вывода работают как PWM (ШИМ) или GPIO: 0 — GPIO; 1 — PWM. bit[0]: направление GPIO: 0 — вход CPLD; 1 — выход CPLD |
| 0 × 13 | только чтение | bit[1:0]: считанные значения GPIO: bit[1] — значение GPIO[1]; bit[0] — значение GPIO[0] |
| 0 × 14 | чтение и запись | bit[1:0]: выводимые значения GPIO: bit[1] — значение для GPIO[1]; bit[0] — значение для GPIO[0]. Пример: если записать в 0 × 12 значение 0 × 01, оба дополнительных вывода работают как GPIO на выход; если затем записать в 0 × 14 значение 0 × 01, на GPIO[1] будет низкий уровень, а на GPIO[0] — высокий |
| 0 × 15 | чтение и запись | bit[5:4]: такт отсчёта периода pwm_0: 3 — 320 мкс; 2 — 160 мкс; 1 — 80 мкс; 0 — 40 мкс. bit[1:0]: такт отсчёта высокого уровня pwm_0: 3 — 40 мкс; 2 — 20 мкс; 1 — 10 мкс; 0 — 5 мкс |
| 0 × 16 | чтение и запись | bit[7:0]: длительность высокого уровня pwm_0 в тактах |
| 0 × 17 | чтение и запись | bit[7:0]: длительность периода pwm_0 в тактах |
| 0 × 18 | чтение и запись | bit[5:4]: такт отсчёта периода pwm_1: 3 — 320 мкс; 2 — 160 мкс; 1 — 80 мкс; 0 — 40 мкс. bit[1:0]: такт отсчёта высокого уровня pwm_1: 3 — 40 мкс; 2 — 20 мкс; 1 — 10 мкс; 0 — 5 мкс |
| 0 × 19 | чтение и запись | bit[7:0]: длительность высокого уровня pwm_1 в тактах |
| 0 × 1A | чтение и запись | bit[7:0]: длительность периода pwm_1 в тактах |
| 0 × 1B | чтение и запись | |
| 0 × 1C | чтение и запись | |
| 0 × 1D | чтение и запись | |
| 0 × 1E | только чтение | Разобранные данные MIPI. bit[7:0]: MIPI DATA ID |
| 0 × 1F | только чтение | Разобранные данные MIPI. bit[4:0]: MIPI, разрешение изображения, столбцы, старшие 5 бит |
| 0 × 20 | только чтение | Разобранные данные MIPI. bit[7:0]: MIPI, разрешение изображения, столбцы, младшие 7 бит |
| 0 × 21 | только чтение | Разобранные данные MIPI. bit[4:0]: MIPI, разрешение изображения, строки, старшие 5 бит |
| 0 × 22 | только чтение | Разобранные данные MIPI. bit[7:0]: MIPI, разрешение изображения, строки, младшие 7 бит |