Например TDA7294

Форум РадиоКот • Просмотр темы - SPI без пауз между байтами, возможен ли?
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пн июл 28, 2025 01:59:14

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 16:13:29 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Пытаюсь наладить общение между Attiny1607 и дисплеем SHARP LCD LS012B7DD01 по SPI.

Возможно ли сделать посылку байт по SPI без пауз?
Видимо мой дисплей только такую понимает. Сейчас не воспринимает первый бит в каждом байте.

Код:
unsigned char SPI0_exchangeData(unsigned char data)
{
   SPI0.DATA = data;

   while (!(SPI0.INTFLAGS & SPI_IF_bm))  /* waits until data is exchanged*/
   {      ;}

   return SPI0.DATA;
}
void SPI_Init()
{
   SPI0.CTRLA = SPI_DORD_bm   /* LSB is transmitted first  */       
       | SPI_ENABLE_bm          /* Enable module */
      | SPI_CLK2X_bm         /* double-speed on*/
       | SPI_MASTER_bm          /* SPI module in Master mode */
       | SPI_PRESC_DIV64_gc;    /* System Clock divided by 64 */  //надо f SCLK ~0.5МГц < 1Mhz  20Мгц/64*2   = 0,312МГц *2  = 0,625МГц   

   SPI0.CTRLB = SPI_MODE1_bm |SPI_SSD_bm |SPI_BUFEN_bm;
}
 void drow_line(unsigned char numline, unsigned char line[23])
{
   unsigned char  i;
   retdata = SPI0_exchangeData(numline);
   for (i=0; i<23; i++)
      SPI0_exchangeData(line[i]);
      
   retdata = SPI0_exchangeData(0x00); //dummy data
   retdata = SPI0_exchangeData(0x00);
   
}
void main()
{
   unsigned char line[23], i;
        ...
        SPI_Init();

   
       while(1)
      {
      for (i=0;i<23;i++)
            line [i] = 0x00; //Black;
   //         line [i] = 0xFF;// White;
   
      SS_ON;//SS_OFF;
      retdata = SPI0_exchangeData(UpdateMode);
      for (i=1; i<=15; i++)
            drow_line (i, line);

      retdata = SPI0_exchangeData(0x00); //dummy data

      WaitIniDisp = 1;
      while(WaitIniDisp); //ждем 1мс      
      
      SS_OFF;//SS_ON;
         }

}


Такой код должен закрасить верхнуюю половину экрана. а на самом деле рисует вот так.
Изображение

На осциллографе тем временем:
Изображение
Розовое - sclk
Желтое - байты (0x00)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 17:23:45 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: -2
Lilia писал(а):
Возможно ли сделать посылку байт по SPI без пауз?

На Attiny1607 бывшей компании Atmel... Нет))
На STM32 можно ))
https://habr.com/ru/post/276605/
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 17:28:06 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
На Attiny1607 бывшей компании Atmel... Нет))

По идее можно, на новых AVR SPI с буферизацией. Дисплею работающему по SPI в любом случае должно быть без разница есть там пауза или нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 17:32:12 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
у меня как раз буферизация включена, а вот дисплею не все равно(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 17:36:23 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
у меня как раз буферизация включена, а вот дисплею не все равно(

Мало включить буферизацию, нужно еще код написать так чтобы она вообще задействовалась, потому что многие отправляют байт и ждут окончания отправки, чтобы прочитать ответ, кроме того еще и по скорости нужно вписаться. С буферизацией твой SPI0_exchangeData() сначала должен проверять есть в буфере место и только потом отправлять байт и никаких ожиданий в конце, потому что пока идет передача нужно успеть в буфер новые данные добавить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 18:27:31 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
Reflector писал(а):
на новых AVR SPI с буферизацией.

Точно))
В старых AVR есть только буфер SPI на приём...
Вложение:
Screenshot_1.jpg [56.72 KiB]
Скачиваний: 90

В новых AVR есть буфер SPI и на передачу...
Вложение:
Screenshot_2.jpg [62.47 KiB]
Скачиваний: 92

Хм... :roll:


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Чт авг 26, 2021 19:04:46 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 4
Сейчас не воспринимает первый бит в каждом байте.

Не верно выставлена фаза тактового сигнала.

Добавлено after 2 minutes 44 seconds:
а вот дисплею не все равно(

дисплею всё равно - он тактируется хостом. И уж точно не отмеряет паузы между посылками.
Вы даже можете посередине передачи пакета отвлечься на что-то, а затем вернуться и продолжить передачу пакета. В этом и состоит вся прелесть синхронных интерфейсов.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Пт авг 27, 2021 14:21:53 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Всем спасибо, проблема решилась!

Если убрать ожидающий while, действительно работает без пауз. Но проблема оказалась не в этом.

Похоже действительно дело было в режиме SPI, хотя я много раз пробовала до этого менять его. Просто magic :shock: :)) ...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Пт авг 27, 2021 16:34:20 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
фото в студию))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Пт авг 27, 2021 17:31:13 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Фото дисплея?
Вот :)

Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Пт авг 27, 2021 17:52:03 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
Интересно вот это фото - SPI без паузы.
Вложение:
Screenshot_1.jpg [11.89 KiB]
Скачиваний: 88

Есть сомнения что SPI будет работать без паузы.
Дело в том что в SPI один сдвиговый регистр который работает на передачу и приём.
Как пишут в даташите... перед отправкой следующего байта по SPI сначала считается значение из сдвигового регистра в приёмный буфер и только потом записывается новое значение из передающего буфера в сдвиговый регистр.
Выходи что чтение и запись сдвигового регистра происходит в один такт процессора ? это вызывает сомнения))
:tea:
Хотя в нормальном режиме SPI работает на 1/4 тактовой частоте.
А в ускоренном режиме SPI работает на 1/2 тактовой частоте.
Если так, то возможно нужен один такт на чтение сдвигового регистра и один такт на запись сдвигово регистра.
Но это не точно))
:tea:
Вот так должна выглядеть работа SPI без паузы.
Вложение:
Screenshot_2.jpg [14.57 KiB]
Скачиваний: 94

Это SCK.
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Пт авг 27, 2021 18:03:11 
Родился

Зарегистрирован: Чт янв 14, 2021 10:25:57
Сообщений: 19
Рейтинг сообщения: 0
Ну дисплей у меня без пауз рисует только одну верхнюю строчку.

А отправка без пауз работает

Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
СообщениеДобавлено: Пт авг 27, 2021 19:56:17 
Друг Кота

Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13
Сообщений: 8169
Откуда: .ru
Рейтинг сообщения: 0
Ну вот. Другое дело))
Теперь видно что SPI работает без пауз.

А у меня ATmega128 как не старайся работает с паузой. Даже если писать на Ассемблере с точностью до такта))
Вложение:
Screenshot_1_cr.jpg [9.53 KiB]
Скачиваний: 84

У меня по SPI рисует кучу экранов)).
Вложение:
Screenshot_1.jpg [67.56 KiB]
Скачиваний: 86

А TFT Nokia 6300 (контроллер MC2PA8201) 320x240 работает в режиме Parallel.
Там проблем нет))
Вложение:
1.jpg [83.74 KiB]
Скачиваний: 73


Итого.
Мы выяснили что в новых AVR блок SPI может работать без пауз.
Всем спасибо.
Теперь буду знать))
:tea:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y