реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Flir Lepton v2 - проблемы с получением кадра
Bakradze
сообщение Jun 27 2018, 15:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 432
Регистрация: 17-12-09
Пользователь №: 54 306



Уважаемые специалисты, подскажите какие есть секреты у 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 итд
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jun 28 2018, 08:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Проверьте аппаратную часть - правильность соединений (на процессоре и на девайсе).
У девайса 2 интерфейса, управляющий I2C и видео - SPI.
Проверьте их работоспособность без подключения к Flir
- SPI соедините MISO-MOSI
- I2C подключите к простому слейву 24LCxx для проверки.
Осцилографом желательно проверить форму-уровни сигналов, в частности тактирующие для обоих интерфейсов.
-- Если ЭТО выполнено ---
Читаем даташит на девайс, протокол обмена. Я начал бы с управляющего интерфейса. Если есть таковая - считать из девайса команду "версия firmware".
ps
Обратите внимение на частоты тактирования интерфейсов. Для I2C - не более 400 кГц, для SPI - не более указанного в даташите на Flir
Go to the top of the page
 
+Quote Post
Bakradze
сообщение Jun 28 2018, 11:54
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 432
Регистрация: 17-12-09
Пользователь №: 54 306



I2C читается-пишется, по SPI приходят пакеты по виду похожие на дискарды, частота клока около 6МГц

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

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



Сообщение отредактировал Bakradze - Jun 28 2018, 12:24
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jun 29 2018, 06:09
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(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.
Go to the top of the page
 
+Quote Post
Bakradze
сообщение Jun 29 2018, 06:47
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 432
Регистрация: 17-12-09
Пользователь №: 54 306



Перепробованы всевозможные настройки SPI...Сейчас в MODE3 но что-то особой разницы нету sad.gif
Go to the top of the page
 
+Quote Post
k155la3
сообщение Jun 29 2018, 07:16
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(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
Скорость "вычитки" должна соответствовать частоте "кадров", чтобы небыло переполнения буфера девайса, кадра или строки.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th April 2024 - 16:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016