Форум РадиоКот • Просмотр темы - SPI без пауз между байтами, возможен ли?
Сообщения без ответов | Активные темы
Страница 1 из 1
[ Сообщений: 13 ]
Автор
Сообщение
Lilia
Заголовок сообщения: 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)
Вернуться наверх
Реклама
roman.com
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Чт авг 26, 2021 17:23:45
Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 8169Откуда: .ru
Рейтинг сообщения: -2
Вернуться наверх
Реклама
Reflector
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Чт авг 26, 2021 17:28:06
Поставщик валерьянки для Кота
Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03Сообщений: 2089
Рейтинг сообщения: 0
На Attiny1607 бывшей компании Atmel... Нет))
По идее можно, на новых AVR SPI с буферизацией. Дисплею работающему по SPI в любом случае должно быть без разница есть там пауза или нет.
Вернуться наверх
Lilia
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Чт авг 26, 2021 17:32:12
Зарегистрирован: Чт янв 14, 2021 10:25:57Сообщений: 19
Рейтинг сообщения: 0
у меня как раз буферизация включена, а вот дисплею не все равно(
Вернуться наверх
Reflector
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Чт авг 26, 2021 17:36:23
Поставщик валерьянки для Кота
Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03Сообщений: 2089
Рейтинг сообщения: 0
у меня как раз буферизация включена, а вот дисплею не все равно(
Мало включить буферизацию, нужно еще код написать так чтобы она вообще задействовалась, потому что многие отправляют байт и ждут окончания отправки, чтобы прочитать ответ, кроме того еще и по скорости нужно вписаться. С буферизацией твой SPI0_exchangeData() сначала должен проверять есть в буфере место и только потом отправлять байт и никаких ожиданий в конце, потому что пока идет передача нужно успеть в буфер новые данные добавить.
Вернуться наверх
Реклама
roman.com
Заголовок сообщения: 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
Хм...
Вернуться наверх
Реклама
parovoZZ
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Чт авг 26, 2021 19:04:46
Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45Сообщений: 1759
Рейтинг сообщения: 4
Сейчас не воспринимает первый бит в каждом байте.
Не верно выставлена фаза тактового сигнала.
Добавлено after 2 minutes 44 seconds: а вот дисплею не все равно(
дисплею всё равно - он тактируется хостом. И уж точно не отмеряет паузы между посылками.
Вы даже можете посередине передачи пакета отвлечься на что-то, а затем вернуться и продолжить передачу пакета. В этом и состоит вся прелесть синхронных интерфейсов.
Вернуться наверх
Lilia
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Пт авг 27, 2021 14:21:53
Зарегистрирован: Чт янв 14, 2021 10:25:57Сообщений: 19
Рейтинг сообщения: 0
Всем спасибо, проблема решилась!
Если убрать ожидающий while, действительно работает без пауз. Но проблема оказалась не в этом.
Похоже действительно дело было в режиме SPI, хотя я много раз пробовала до этого менять его. Просто magic
...
Вернуться наверх
roman.com
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Пт авг 27, 2021 16:34:20
Карма: 2
Рейтинг сообщений: 67
Зарегистрирован: Вт мар 13, 2012 12:16:13Сообщений: 8169Откуда: .ru
Рейтинг сообщения: 0
Вернуться наверх
Реклама
Lilia
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Пт авг 27, 2021 17:31:13
Зарегистрирован: Чт янв 14, 2021 10:25:57Сообщений: 19
Рейтинг сообщения: 0
Фото дисплея?
Вот
Вернуться наверх
roman.com
Заголовок сообщения: 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 сначала считается значение из сдвигового регистра в приёмный буфер и только потом записывается новое значение из передающего буфера в сдвиговый регистр.
Выходи что чтение и запись сдвигового регистра происходит в один такт процессора ? это вызывает сомнения))
Хотя в нормальном режиме SPI работает на 1/4 тактовой частоте.
А в ускоренном режиме SPI работает на 1/2 тактовой частоте.
Если так, то возможно нужен один такт на чтение сдвигового регистра и один такт на запись сдвигово регистра.
Но это не точно))
Вот так должна выглядеть работа SPI без паузы.
Вложение:
Screenshot_2.jpg [14.57 KiB]
Скачиваний: 94
Это SCK.
Вернуться наверх
Lilia
Заголовок сообщения: Re: SPI без пауз между байтами, возможен ли?
Добавлено: Пт авг 27, 2021 18:03:11
Зарегистрирован: Чт янв 14, 2021 10:25:57Сообщений: 19
Рейтинг сообщения: 0
Ну дисплей у меня без пауз рисует только одну верхнюю строчку.
А отправка без пауз работает
Вернуться наверх
roman.com
Заголовок сообщения: 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 может работать без пауз.
Всем спасибо.
Теперь буду знать))
Вернуться наверх
Страница 1 из 1
[ Сообщений: 13 ]
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения