Перейти к содержанию
    

Проблемы с SPI интерфейсом

2 часа назад, k155la3 сказал:

Может быть какая-то из задержек стоит на грани предела в ту или иную сторону. На одних платах эта грань "прокатывает", на других - нет.

В моём проекте на ILI9340 при инициализации только в 2-х местах есть задержки: после "Software Reset" (0x01) = 6 мсек и после "Sleep Out" (0x11) = 121 мсек. Больше нигде нету.

Весь инит идёт нормально на любой SCLK (вплоть до 45МГц пробовал).

Хотя конечно не ILI9341.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

В моём проекте на ILI9340 при инициализации . . . 

При снижении частоты CLK SPI задержки должны были увеличиться автоматически, но не помогло.

ТС  без схемы (хотябы узла с SPI-->TFT) оставил такой "полет фантазии", что ... Ж8))))

В  документации ILI9341.pdf  есть раздел 12. Power ON/OFF Sequence с диаграммой.  (первое на что наткнулся)

Но что там у ТС в HW-интерфейсе TFT/ILI9341 задействовано (кроме SPI) - трудно сказать. Я бы проверил ресетную линию, если она имеется, и успевает ли установиться питание. Может в этом экземпляре контроллера поставили бОльшую емкость и установка питания затягивается. 

Quote

после "Sleep Out" (0x11) = 121 мсек.

После аппаратного ~Reset также дб задержка 120 ms до первой операции-команды.

 

Spoiler

image.thumb.png.b808ec0d805f106001718bdc2b059134.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не забыть про ожидание окончания передачи данных на ILI9341 перед убиранием чипселекта и перед сменой состояния сигнала control/data.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 часов назад, k155la3 сказал:

При снижении частоты CLK SPI задержки должны были увеличиться автоматически, но не помогло.

Задержки, о которых я писал, даже близко не могут быть достигнуты тем снижением частоты SCLK, которое производил ТС.

10 часов назад, k155la3 сказал:

ТС  без схемы (хотябы узла с SPI-->TFT) оставил такой "полет фантазии", что ... Ж8))))

И без программы - тоже. Так как баг может быть программным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To jcxz

1. Я конечно прошу прощения, но я не знаю что означает "TC"

2. "без схемы (хотябы узла с SPI-->TFT) оставил такой ..." - Ну Вы конечно силен! Какая схема? Семь ножек микроконтроллера (MOSI;MISO;SCLK;CS;RS;RST;BACKLED) напрямую соединены с соответствующими ножками TFT! Ну и GND and VCC (3V3)... Вот и вся схема! 

3. "И без программы - тоже"  Ну если вы чувствуете силы и в этом - посылаю программу интерфейса SPI нижнего уровня...

M1165_TFTSPI_Config.c

To GenaSPB

Да! Это существенное замечание! Я как раз этого и не делал! Спасибо за совет!

Изменено пользователем onic777

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 minutes ago, onic777 said:

. . .

2. "без схемы (хотябы узла с SPI-->TFT) оставил такой ..." - Ну Вы конечно силен! Какая схема? Семь ножек микроконтроллера (MOSI;MISO;SCLK;CS;RS;RST;BACKLED) напрямую соединены с соответствующими ножками TFT! Ну и GND and VCC (3V3)... Вот и вся схема! . . . 

Ну, это как из старого военно-зеленого-бронированного анекдота "на чем радиостанция".

Какая схема - принципиальная :dash2:  ! ! !  :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

void GLCD_SPI_Init (void)
{  
 	GLCD_RESET(); 
------------------------------------------- <<<<<<<<<<<< Delay( 120 ms )
	//*** For 3.2" ILI9341
	GLCD_WR_REG(0xCF);  
	GLCD_WR_DATA(0x00); 
. . . .
  
  
  
// **************************************
void GLCD_RESET(void)
{
	TFT_RST (0);
	Delay(1200);	
	TFT_RST (1);
	Delay(200);
}
  

Вроде тут дб задержка, которую здесь выше упоминали. Я бы проверил это.

ps Delay(xxx) те что в коде это миллисекунды ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем в тему, но про SPI. Был у меня случай. МК грузит ПЛИС через SPI. Есть две платы. До определенного момента обе работали нормально. Потом, после некоторой модернизации прошивки МК, вдруг перестала грузиться ПЛИС на одной из плат. Недели две наверное исследовал проблему. И на уровне исходников, и с помощью осциллографа... проблема решилась перепаиванием ПЛИС. Видимо отвалился контакт в BGA корпусе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Delay in milliseconds;

Time in microseconds;

А на счет BGA корпусов - это конечно совсем отдельная песня! Лет 10 назад я делал GPS модули и микруха там была в BGA. Так я для надежности в каждом контакте опверстие по 03 сделал и паял теплым воздухом (~200C) сквозь них снизу платы! Ну и тестировать плату было одно удовольствие!!! Все контакты доступны...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 minutes ago, onic777 said:

Delay in milliseconds;

. . .

Ресет длительностью 1.2 s.

Что показывает построчное прохождение кода отладчиком ?

Кстати, повторяю свой вопрос, в чем проявляется "неработа". У Вас есть контрольный LED, который подмигивает, что софт не ушел (куда-то) в "завес" ? Или все работает, кроме дисплея ? Или дисплей тоже подает признаки "жизни" ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прости! Не совсем понял! А что может в этом случае показывать отладчик! Все команды проходять, задержки отрабатываются...

В чем проявляется неработа? 

Рабочий LCD ведет себя так - после сброса экран стирается (становится черным) и начинается формирование надписей...

Не рабочий - после стирания остается белым, а программа правильно идет дальше (пытается выводить на экран тестовые строки и изображения) как положено подает сигналы контрольным LED и звуковые сигналы... После прохождения под отладчиком полного цикла вывода стартовой информации программа начинает правильно выполнять основную задачу...

Если сообщишь EMail - пришлю видео загрузки! А то 4MB ограничения маловато... Видео 38МВ

Мой EMail  [email protected]

 

Изменено пользователем onic777

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, onic777 сказал:

3. "И без программы - тоже"  Ну если вы чувствуете силы и в этом - посылаю программу интерфейса SPI нижнего уровня...

M1165_TFTSPI_Config.c 12 kB · 1 скачивание

Я смотрю:

  GLCD_WR_REG(0x11); //Exit Sleep
  GLCD_WR_REG(0x29); //Display on

Вы проигнорировали мой совет по необходимым задержкам:

20 часов назад, jcxz сказал:

В моём проекте на ILI9340 при инициализации только в 2-х местах есть задержки: после "Software Reset" (0x01) = 6 мсек и после "Sleep Out" (0x11) = 121 мсек. Больше нигде нету.

как и требования даташита ILI934x, в котором говорится о необходимости задержек. Возможно из-за этого и не работает у Вас.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за напоминание, но я еще до этой работы не доехал! Где-то через пару часов приступлю к проверке...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 часа назад, onic777 сказал:

To GenaSPB

Да! Это существенное замечание! Я как раз этого и не делал! Спасибо за совет!

Если не делаете, то может всё-таки стоит делать?  :wink:

По присланному огрызку кода невозможно понять - правильно ли работаете с SPI, так как самой работы с SPI (функция USART_SpiTransfer()) там нет.

Так что - продолжаем гадать на кофейной гуще... Но мнение о том, что проблема именно в кривой прошивке - укрепилось.  :unknw:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, jcxz said:

Если не делаете, то может всё-таки стоит делать?  :wink:

По присланному огрызку кода невозможно понять - правильно ли работаете с SPI, так как самой работы с SPI (функция USART_SpiTransfer()) там нет.

Так что - продолжаем гадать на кофейной гуще... Но мнение о том, что проблема именно в кривой прошивке - укрепилось.  :unknw:

Делать конечно стоит!

Ну я еще сегодня не добрался до этой работы...

У мнея, увы, есть и другие функции... 

Что касается гадания на кофейной гуще и поиска отсутствующей функции "как самой работы с SPI (функция USART_SpiTransfer()) там нет", то может все же стоит посмотреть внимательнее огрызок кода ?!!! 

 // **************************************
// *  Do One SPI Exchange
// **************************************
byte TFT_SPI (byte data)
{
    if (timeOut)
    {
        timeOut--;
    }
    return USART_SpiTransfer(TFT_USART, data);
}

Вся дальнейшая работа строится на использовании этой функции...

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...