Bakradze 0 27 июня, 2018 Опубликовано 27 июня, 2018 · Жалоба Уважаемые специалисты, подскажите какие есть секреты у 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]=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 26 28 июня, 2018 Опубликовано 28 июня, 2018 · Жалоба Проверьте аппаратную часть - правильность соединений (на процессоре и на девайсе). У девайса 2 интерфейса, управляющий I2C и видео - SPI. Проверьте их работоспособность без подключения к Flir - SPI соедините MISO-MOSI - I2C подключите к простому слейву 24LCxx для проверки. Осцилографом желательно проверить форму-уровни сигналов, в частности тактирующие для обоих интерфейсов. -- Если ЭТО выполнено --- Читаем даташит на девайс, протокол обмена. Я начал бы с управляющего интерфейса. Если есть таковая - считать из девайса команду "версия firmware". ps Обратите внимение на частоты тактирования интерфейсов. Для I2C - не более 400 кГц, для SPI - не более указанного в даташите на Flir Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bakradze 0 28 июня, 2018 Опубликовано 28 июня, 2018 (изменено) · Жалоба I2C читается-пишется, по SPI приходят пакеты по виду похожие на дискарды, частота клока около 6МГц А без чтения версии firmware он не начнет выдавать данные по SPI? Обязательно ли подключение MOSI? Если что, тепловизор смонтирован в плату Lepton Breakout Board v 1.4 Изменено 28 июня, 2018 пользователем Bakradze Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 29 июня, 2018 Опубликовано 29 июня, 2018 · Жалоба . . . Обязательно ли подключение 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 0 29 июня, 2018 Опубликовано 29 июня, 2018 · Жалоба Перепробованы всевозможные настройки SPI...Сейчас в MODE3 но что-то особой разницы нету :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 29 июня, 2018 Опубликовано 29 июня, 2018 · Жалоба Перепробованы всевозможные настройки SPI...Сейчас в MODE3 но что-то особой разницы нету :( Тут дело не в "разнице" а в проверке CRC полученного фрейма. И перебирать настройки, я думаю, не перспективно. Следует установить те, на которых вам отвечает слейв. Это элементарно проверяется осциллографом, 1. Синхронизируете осцилограф по входу вненей син-ии от спада ~CS 2. Канал 1 - SCK 3. Канал 2 - MISO (то, что выдает слейв - Flir) Проверяете: До появления "спада" ~CS уровень SCK должен быть 1 После спада CS SCK должно "уйти" в 0. Причем: уровень на линии MISO в момент Raise-SCK изменяться не должен уровень на линии MISO может изменяться в момент Fail-SCK Если предположить, что в этой части все работает так как надо - проверяем уже софт, чтение из SPI. ps Скорость "вычитки" должна соответствовать частоте "кадров", чтобы небыло переполнения буфера девайса, кадра или строки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться