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

на каждый пятый байт выдаваемый SPI прижать одну ногу контроллера

Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта...
хотелось бы данные отправлять по SPI (DMA) ну и заодно как-то по счетчикам от CLCK или по каким то эвентам SPI или DMA дергалась нога D/C

Дисплей по даташиту проверяет ногу D/C во время приема восьмого бита.

можно ли как-то это доверить таймерами, счетчикам STM32 или аппаратно, на микросхемах ваять?
Если на микросхемах, то какие серии микросхем стандартной логики стабильно работают до 100МГц (это я уж немного слихачил на запас, реально 50МГц) при 3.3V.?

Как там вообще эти микросхемы подбираются? Есть какой толковый справочник? (я конечно понимаю, что сейчас это моветон интересоваться микросхемами стандартной логики be.gif

ЧИп STM32F407VG если это важно, но хотелось бы чтобы решение как-то ложилось и на другие контроллеры STM32.

Спасибо заранее!

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


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

52 минуты назад, AlexKeisy сказал:

Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта...

Вы уверены, что правильно поняли описание? Обычно контроллер дисплея проверяет ногу D/C в конце приема первого байта и дальше не обращает на нее внимания до первого байта следующей посылки, ибо все байты этой посылки являются командой или данными. Таким образом ее можно держать притянутой к нулю во время всей посылки команды, то есть выставлять в нужное состояние перед выставлением CS в ноль и дальше не трогать до выставления CS в ноль на следующей посылке.

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


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

Мдааа... оказалось время фиксации D\C  у разных дисплеев разное. ST7735 проверяет при первом бите. SSD1306 по последнему биту.

Остается одно:  для отправки байта команды точно должно быть включено, после отправки байта, до отправки следующего точно должно быть выключено. 

Возможно есть и такие дисплеи что поступают как указал Сергей Борщ. но чипселект тоже не хотелось бы дергать при каждой команде, это проблем не снимает, а только переносит на другую ногу.

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


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

Но пойду проверю на чипах, может это что-то даст...

Проверил ST7735, к следующему байту надо D/C снимать иначе следующий байт тоже считает командой а ждет данные.

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


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

1 час назад, AlexKeisy сказал:

Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта...

Если обмен данными по SPI организован вами с тактированием слейва по ChipSelect (а иначе случайный пропуск единственного бита приведет к смещению форматного окна), то вы можете эту же линию CS завести на счетный вход одного из таймеров, запрограммировав его считать до 5-ти (ARR=5) и выдавать меандр со скважностью 1:4 (CCR1=4). Тогда на выходе этого таймера в течение 4-х байт будет низкий уровень, а на 5-ом высокий. Это у меня идея такая, а конкретно с нужными вам тактами разбирайтесь сами.

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


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

Спасибо! Все верно, только наверное оговорочка не CS а CLCK. Это один из возможных вариантов наверное, но придется пробрасывать физ линию между SPI.CLCK до ETR таймера.

А нельзя  евент от SPI или DMA как то логически пробросить на вход таймера? 

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


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

10 минут назад, AlexKeisy сказал:

Все верно, только наверное оговорочка не CS а CLCK.

Нет, не оговорка. CS тактирует байты, а CLCK - биты. Но можно было бы и к битам счетчик привязать, т.к. их число четко привязано к байтам в отношении 8:1. Я же хотела байты таймером считать, а не биты.

 

10 минут назад, AlexKeisy сказал:

А нельзя  евент от SPI или DMA как то логически пробросить на вход таймера?

На STM32 нельзя - его таймеры логические события не воспринимают - только внешние сигналы. А вот на ATxmega такое можно было бы сделать.

 

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


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

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

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


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

12 минут назад, AlexKeisy сказал:

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

Положено на каждый байт дергать :).

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


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

3 часа назад, AlexKeisy сказал:

ЧИп STM32F407VG если это важно, но хотелось бы чтобы решение как-то ложилось и на другие контроллеры STM32.

Какой МК - не особо важно, а вот какой контроллер LCD - важно. Забыли указать.

Вообще выглядит сомнительным такой алгоритм, как описали. Может не правильно поняли?

56 минут назад, Xenia сказал:

Положено на каждый байт дергать :).

Бывает по-разному. Но чаще как правило - CS активен весь передаваемый по SPI кадр.

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


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

4 минуты назад, jcxz сказал:
1 час назад, Xenia сказал:

Положено на каждый байт дергать :).

Бывает по-разному. Но чаще как правило - CS активен весь передаваемый по SPI кадр.

Так это же очевидно! А между кадрами?

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


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

20 минут назад, jcxz сказал:

Какой МК - не особо важно, а вот какой контроллер LCD - важно. Забыли указать.

Вообще выглядит сомнительным такой алгоритм, как описали. Может не правильно поняли?

Бывает по-разному. Но чаще как правило - CS активен весь передаваемый по SPI кадр.

Алгоритм точно рабочий, работающий, хочется сделать быстрее и проще в программировании. У конечного автомата количество состояний хочется оптимизировать, чтобы снизить накладные расходы.

Потому и не назвал дисплей, потому что знаю точно, что нужно  отправить по SPI и как при этом дергать ногу D/C (хотя тут тоже как оказалось есть непринципиальные нюансы).  И эта последовательность работает для трех разных дисплеев точно.

Интересует как в контроллере сделать то, что требуется. Желательно как то eventы SPi переправить на таймер, может есть костыль какой?

Пока прорисовывается вариант с физическим пробросом SPI.CLCK->TIMER.ETR. костыль конечно, но лучше чем микрухи еще городить при таком жирном проце.

 

Но с микрухами появляется возможность в дисплеи заливать по параллельному интерфейсу, что быстрее (те что у меня дисплеи могут по SPI работать 36МГц, а по параллельной шине 16 бит 18МГц, что существенно быстрее) и можно для больших дисплеев или меньших камней рассматривать. Но тут я столкнулся с тем, что не нашел микруху-счетчик/делитель который работает выше 25МГц. Соседние по индексу микросхемы защелки с последовательным входом параллельным выходом есть(74hc595d к примеру), всякие разные есть, а счетчиков/делителей нет. нипанимаю :), опыта в этом ноль, один интузиазизм.

 

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


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

13 hours ago, AlexKeisy said:

Но тут я столкнулся с тем, что не нашел микруху-счетчик/делитель который работает выше 25МГц.

Для 100MHz серия 74HC не подходит. Попробуйте например 74LVC (74LVC161)

 

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


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

О Спасибо! теперь бы еще найти где купить :))), чет для любителей кроме чип и дип поштучно никто не предлагает или доставка по конским ценам...

 

Поискал по каталогам Lv серию, вообще отбили желание :)))

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

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


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

On 12/20/2021 at 9:59 PM, AlexKeisy said:

О Спасибо! теперь бы еще найти где купить

https://www.electronshik.ru

Около 130р в розницу

 

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


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

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

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

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

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

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

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

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

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

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