Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Flir Lepton v2 - проблемы с получением кадра
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
Bakradze
Уважаемые специалисты, подскажите какие есть секреты у Lepton v2? Уже который день не получается добиться взаимности от указанного модуля.

Инициализация SPI

void spi_init()
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_Init(GPIOA, &GPIO_InitStructure);


SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //полный дуплекс
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; // передаем по 8 бит
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // Полярность и
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // фаза тактового сигнала
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // Управлять состоянием сигнала NSS программно
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // Предделитель SCK
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; // Первым отправляется старший бит
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; // Режим - мастер
SPI_Init(SPI1, &SPI_InitStructure); //Настраиваем SPI1
SPI_Cmd(SPI1, ENABLE); // Включаем модуль SPI1
SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set);
}


Функция чтения пакета имеет следующий вид:

void read_packet(uint8_t j)
{
uint16_t i;
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //CS=0

for(i=0;i<164;i++)
{
SPI_I2S_SendData(SPI1, 0x00);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY) == SET); //ждем окончание передачи
leptonpkt[j][i]=SPI_I2S_ReceiveData(SPI1); //размещаем пакеты в буфер
}

GPIO_SetBits(GPIOA,GPIO_Pin_4); //CS=1

}


В мэйне происходит так:

uint8_t leptonpkt[60][164];

int main()
{

GPIO_SetBits(GPIOA,GPIO_Pin_4);
//задержка
GPIO_ResetBits(GPIOA,GPIO_Pin_4);

for(j=0;j<60;j++) //заполняем буфер строками
{
read_packet(j);
}

}



Проблема заключается в том, что лептон шлет всякую ерунду, при этом ни одного пакета с номером строки. Все настройки - по умолчанию: AGC off, telemetry disabled итд
k155la3
Проверьте аппаратную часть - правильность соединений (на процессоре и на девайсе).
У девайса 2 интерфейса, управляющий I2C и видео - SPI.
Проверьте их работоспособность без подключения к Flir
- SPI соедините MISO-MOSI
- I2C подключите к простому слейву 24LCxx для проверки.
Осцилографом желательно проверить форму-уровни сигналов, в частности тактирующие для обоих интерфейсов.
-- Если ЭТО выполнено ---
Читаем даташит на девайс, протокол обмена. Я начал бы с управляющего интерфейса. Если есть таковая - считать из девайса команду "версия firmware".
ps
Обратите внимение на частоты тактирования интерфейсов. Для I2C - не более 400 кГц, для SPI - не более указанного в даташите на Flir
Bakradze
I2C читается-пишется, по SPI приходят пакеты по виду похожие на дискарды, частота клока около 6МГц

А без чтения версии firmware он не начнет выдавать данные по SPI?
Обязательно ли подключение MOSI?

Если что, тепловизор смонтирован в плату Lepton Breakout Board v 1.4

k155la3
Цитата(Bakradze @ Jun 28 2018, 14:54) *
. . . Обязательно ли подключение MOSI?
судя по док-ии - не обязательно.
Проверьте настройки SPI процессора (полярность, фаза) на соотв-ие требованиям даташита. Неактивное состояние SCK == 1, защелка данных по Raise-фронту.
Если эти настройки не верные, то процессор будет принимать непонятночто. Это "типовая" ошибка в настройках интерфейса SPI.
Проверяйте правильность данных по CRC.
ps - в даташите, то о чем указано выше
Код
The Lepton uses SPI Mode 3 (CPOL=1, CPHA=1). SCK is high when idle. Data is set up
by the Lepton on the falling edge of SCK, and should be sampled by the host controller on
the rising edge of SCK.
Bakradze
Перепробованы всевозможные настройки SPI...Сейчас в MODE3 но что-то особой разницы нету sad.gif
k155la3
Цитата(Bakradze @ Jun 29 2018, 09:47) *
Перепробованы всевозможные настройки SPI...Сейчас в MODE3 но что-то особой разницы нету sad.gif
Тут дело не в "разнице" а в проверке CRC полученного фрейма.
И перебирать настройки, я думаю, не перспективно. Следует установить те, на которых
вам отвечает слейв. Это элементарно проверяется осциллографом,
1. Синхронизируете осцилограф по входу вненей син-ии от спада ~CS
2. Канал 1 - SCK
3. Канал 2 - MISO (то, что выдает слейв - Flir)
Проверяете:
До появления "спада" ~CS уровень SCK должен быть 1
После спада CS SCK должно "уйти" в 0.
Причем:
уровень на линии MISO в момент Raise-SCK изменяться не должен
уровень на линии MISO может изменяться в момент Fail-SCK

Если предположить, что в этой части все работает так как надо - проверяем уже софт, чтение из SPI.

ps
Скорость "вычитки" должна соответствовать частоте "кадров", чтобы небыло переполнения буфера девайса, кадра или строки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.