К содержимому
  1. Главная
  2. Документация
  3. Камеры для Arduino и MCU
  4. Временные диаграммы обмена данными по шине SPI Arducam

Временные диаграммы обмена данными по шине SPI Arducam

Документация Arducam · перевод arducam-russia.ru

Тест на платформе Arduino UNO

В Arducam провели полный тест на платформе Arduino UNO при частоте SPI 4 МГц (на примере ArduCAM_MINI_5MP_Plus).

1. Проверка сенсора

  • Адрес I2C: запись — 0 × 78, чтение — 0 × 79
  • ID сенсора читается из регистров 0 × 300A и 0 × 300B
  • ID сенсора: 5642
Временная диаграмма обмена данными по шине
Адреса чтения и записи I2C

2. Тест SPI

Запишите значение 0 × 55 по адресу 0 × 00 и прочитайте значение с адреса 0 × 00.

Запись и чтение регистра 0 × 00 по SPI

3. Передача данных изображения

После запуска съёмки в цикле читается адрес 0 × 41, пока значение по нему не станет 0 × 08 — это значит, что кадр завершён.

Передача данных изображения на осциллограмме

Затем из регистров 0 × 42, 0 × 43 и 0 × 44 считывается длина изображения.

Чтение длины изображения

Далее данные изображения читаются в пакетном режиме (burst):

Сначала установите низкий уровень на линии SPI CS и прочитайте адрес 0 × 3C — это операция пакетного чтения FIFO (Burst FIFO read).

Операция пакетного чтения FIFO

Затем читаются данные изображения: изображение начинается с байтов 0xFF 0xD8 и заканчивается байтами 0xFF 0xD9.

Маркер изображения JPEG на осциллограмме
Маркер изображения JPEG на осциллограмме

Код

myCAM.CS_LOW();
myCAM.set_fifo_burst();
while ( length-- )
{
  temp_last = temp;
  temp =  SPI.transfer(0x00);
  //Read JPEG data from FIFO
  if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while,
  {
    buf[i++] = temp;  //save the last  0XD9     
    //Write the remain bytes in the buffer
    myCAM.CS_HIGH();
    Serial.write(buf,i);
    is_header = false;
    i = 0;
  }  
  if (is_header == true)
  { 
    //Write image data to buffer if not full
    if (i < 256)
      buf[i++] = temp;
    else
    {
      //Write 256 bytes image data to file
      myCAM.CS_HIGH();
     Serial.write(buf,256);
     delay(5);
      i = 0;
      buf[i++] = temp;
      myCAM.CS_LOW();
      myCAM.set_fifo_burst();
    }        
  }
  else if ((temp == 0xD8) & (temp_last == 0xFF))
  {
    is_header = true;
    Serial.println(F("ACK IMG"));
    buf[i++] = temp_last;
    buf[i++] = temp;   
  } 
}

Как обычно, частота кадров ограничена быстродействием контроллера.

В Arducam тестировали ArduCAM MINI 2MP на платформе STM32F103: частота кадров достигает 15 к/с.

Запросить цену

Укажите количество — пришлём коммерческое предложение.