В гостях у Саши или как получить свою первую картинку от камеры VC0706
Привет, мои дорогие друзья!
Вчера я была у Саши и мы продолжили знакомство с камерой VC0706.
Сегодня я расскажу как взаимодействовать с камерой через последовательное соединение (UART).
Введение
В камере VC0706 есть буфер - FBUF куда помещается два кадра (изображения): текущий и следующий. Периодически данные с CMOS сенсора записываются в текущий кадр, предварительно копируя их в следующий. То что нам нужно - это читать один из кадров. Для этого нужно проделать следующие шаги:
- Остановить обновление кадра в FBUF с помощью команды FBUF_CTRL.
- Прочитать размер изображения, которое хранится в буфере, с помощью команды GET_FBUF_LEN
- Получить данные из буфера с помощью команды READ_FBUF.
- Возобновить обновление кадра в FBUF с помощью команды FBUF_CTRL.
Знакомство с командами
FBUF_CTRL
Описание: управление буфером (FBUF)
Формат команды: 0x56+serial number+0x36+0x01+control flag(1byte)
где control flag принимает значения:
- 0: остановить текущий кадр;
- 1: остановить следующий кадр;
- 2: возобновить обновление кадров;
- 3: step frame (не уверена, но думаю, сдвинуть "кадр текущий" <- "следующий кадр").
Возвращаемый ответ:
OK: 0x76+serial number+0x36+0x00+0x00
Error: 0x76+serial number+0x36+0x03+0x00
Примеры команд:
- 0x56+0x00+0x36+0x01+0x00 остановить текущий кадр;
- 0x56+0x00+0x36+0x01+0x01 остановить следующий кадр;
- 0x56+0x00+0x36+0x01+0x02 возобновить обновление кадров;
- 0x56+0x00+0x36+0x01+0x03 step frame.
GET_FBUF_LEN
Описание: возвращает размер изображения в байтах
Формат команды: 0x56+serial number+0x34+0x01+FBUF type(1 byte)
где FBUF type принимает значения:
- 0: текущий кадр;
- 1: следующий кадр;
Возвращаемый ответ:
OK: 0x76+serial number+0x34+0x00+0x04+FBUF data-lengths(4bytes)
Error: 0x76+serial number+0x34+0x03+0x00
Примеры команд:
- 0x56+0x00+0x34+0x01+0x00 получить размер текущего кадра;
- 0x56+0x00+0x34+0x01+0x01 получить размер следующего кадра;
Как правило, команда используется перед чтением FBUF.
READ_FBUF
Описание: возвращает изображение из буфера(FBUF)
Формат команды: 0x56+serial number+0x32+0x0C+FBUF type(1byte)+control mode(1 byte)+starting address(4bytes)+data-length(4 bytes)+delay(2 bytes)
где FBUF type принимает значения:
- 0: текущий кадр;
- 1: следующий кадр;
Control mode режим передачи данных изображения:
- Bit[0]
- 0: передача данных по MCU;
- 1: передача данных по DMA;
- Bit[1,2]: 2'b11
- Bit[3]: 1'b11
Starting address: адрес в FBUF, хранящий кадр.
Data-length:количество байт для чтения должно быть кратным 4.
Delay: время задержки между командой и данными, единица измерения 0,01 милисекунд.
Возвращаемый ответ:
OK: 0x76+serial number+0x32+0x00+0x00 кадр 0x76+serial number+0x32+0x00+0x00
Error: 0x76+serial number+0x32+error code+0x01
Примеры команд:
0x56+0x00+0x32+0x0C+0x00+0x0F+0x00+0x00+0x00+0x10+0x00+0x00+0x02+0x00+0x10+0
x00, где:
Starting address - 0x0100, Control mode - DMA. Data-length - 0x0200, Delay - 40,96 милисекунды.
Перед выполнением этой команды необходимо остановить обновление буфера, иначе произойдет сбой.
Рекомендуется использовать DMA режим, т.к у этого режима более высокая скорость передачи данных, чем у MCU.
Результирующий список команд
Шаг 1. Остановить обновление кадра: 56 00 36 01 00
Шаг 2. Получить размер изображения: 56 00 34 01 00
Ответ: 76 00 34 00 04FF FF FF FF, где FF FF FF FF - размер кадра (изображения)
Шаг 3. Получить изображение : 56 00 32 0C 00 0A00 00 00 00FF FF FF FF10 00
Ответ: 76 00 32 00 00FF D8 ...Image data...FF D976 00 32 00 00
Шаг 4. Возобновить обновление кадра:56 00 36 01 03
В следующей статье я опишу как на практике получить картинку.