К содержимому
  1. Главная
  2. Блог
  3. Временные диаграммы шины SPI в камере Arducam Mini

Временные диаграммы шины SPI в камере Arducam Mini

22 октября 2019 · По материалам Arducam

Временные диаграммы ниже показывают полный цикл работы модуля ArduCAM 5MP Plus (OV5642):

Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 1
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 2
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 3
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 4
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 5
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 6
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 7
Временная диаграмма работы ArduCAM 5MP Plus (OV5642), часть 8

1. Проверка идентификатора модели сенсора

Адрес OV5642 на шине I2C (ведомое устройство): 0 × 78 для записи, 0 × 79 для чтения. Регистры идентификатора модели OV5642: 0 × 300A = 0 × 56 и 0 × 300B = 0 × 42.

2. Операции SPI

Операции показаны на плате Arduino UNO при частоте SPI 4 МГц.

2.1. Проверка шины SPI

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

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

После команды захвата опрашивайте флаг завершения захвата, читая регистр 0 × 41, пока его значение не станет равно 0 × 08. Затем прочитайте длину изображения из регистров 0 × 42–0 × 44 — это общая длина действительных данных изображения.

Далее отправьте команду пакетного чтения FIFO 0 × 3C и читайте байты из FIFO. На диаграмме ниже первыми читаются байты 0xFF, 0xD8 — в данном случае это заголовок JPEG. Каждый цикл пакетного чтения должен начинаться с команды 0 × 3C, после которой можно прочитать любое количество данных; в этом примере читается 256 байт. При чтении по линии MOSI нужно передавать фиктивные данные, например 0 × 00. В конце действительных данных читается окончание JPEG — в данном случае 0xFF, 0xD9.

2.3. Полная временная диаграмма захвата и чтения

Вывод CS активен (низкий уровень) только во время пакетного чтения 256 байт; пока эти 256 байт передаются по UART, CS переводится в высокий уровень. Один кадр читается за несколько циклов пакетного чтения.

3. Ключевой код функции пакетного чтения

/**important code in the burst read function/
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 Host
Программа Arducam Host

Ещё по теме

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

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