Pasha65

Емулятор шини SPI.

12 повідомлень у цій темі

Доброго всім дня. Виникла потреба покерувати пристроями по шині SPI. Може хтось робив емулятор вищезгаданої шини з можливістю виставляти всім бітам в пакеті потрібні значення, щоб не городити щось від себе, бо не дуже є на то час. Бажано не програмними, а апаратними засобами.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Доброго дня. Було б непогано щоб ви зорієнтували наскільки ви вже розбираєтесь в цій темі - просто щоб не починати від сотворення світу. Бо якщо зовсім коротко - розробка універсального (це ключове слово) апаратного емулятора забере стільки часу і коштів, що краще навчитись програмувати якусь ардуїну

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Доброго дня. Почну з кінця. Ардуіною зараз і користуююся для керування модулями (V23993-A-1005). Але програмування її я не освоїв так-як ніколи не було потреби, тож попросив добрих людей допомогти. Але це разові речі, а зараз виникла потреба по 100-150 раз за день міняти параметри, тож бігати за кимось стільки просто не реально, тож і вирішив зробити щось своє. Не розумію, що Ви маєте на увазі під універсальним емулятором, я говорив про конкретну шину SPI і нічого надскладного там немає. Так пару днів це з'їсть, тому і поцікавився у спільноти, може хтось таке вже робив. Сьогоднішній день весь пішов "туди" - продумав структурну схему, довів до принципової, зараз розпишу цокольовку по ніжкам, і завтра вже почну паяти макетку. На все про все виходить під 20 корпусів ТТЛ логіки.

 

 

 

 

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
1 година тому, Pasha65 написав:

Не розумію, що Ви маєте на увазі під універсальним емулятором

 

Універсальний - це щоб підтримував усі чотири режими SPI, побайтовий (коли SS знімається після кожного байта) і потоковий (коли SS утримується для передачі усіх байт) обмін, можливість затримки перед передачею, можливість довільних сценаріїв обміну. Розпишу детальніше.

 

Шина SPI визначає тільки фізичний протокол обміну даними. Тобто які лінії яку функцію виконують, і які сигнали потрібно подавати щоб обмінятись байтами. Однак, навіть тут єдиного стандарту нема, оскільки є аж чотири варіації - залежно від того чи клок буде прямий (неактивний рівень низький, активний високий), чи інвертований (неактивний рівень високий, активний - низький), і залежно від того чи наступний біт зчитується при переході клока з неактивного в активний, чи навпаки. Підтримка цього добра - просто базовий мінімум, що має вміти контроллер (master) SPI.

 

Цікавіша частина - це периферійні пристрої. Тому що кожен з них має власний програмний інтерфейс, що базується на SPI. Тобто для роботи з кожним конктретним пристроєм потрібно відправляти не один байт, а певні послідовності, з конкретними затримками між ними, і відповідь зчитувати теж в певні моменти. Власне, я слабо уявляю як таке реалізовувати без мікроконтроллера.

 

Взагалі, інтерфейс SPI історично виріс як розвиток зі своїх перших апаратних реалізацій, до яких головна вимога була - бути простими. І перші варіанти являли собою просто два регістри зсуву - один для передачі, другий для прийому. Наприклад, пара 74HC164 (SIPO) + 74HC165 (PISO). Якщо дивитись з боку контроллера, х164 підключається до лінії MISO, х165 до лінії MOSI, їхні клоки - до лінії SS. Контроллер записує байт для передачі в х165, і активує SS. При цьому байт просувається в регістр зсуву, його перший біт появляється на MOSI. Далі, за вісім імпульсів клока, біти висуваються з х165, і одночасно вісім біт приймаються від периферійного пристрою в х164. Потім контроллер знімає SS і може читати отриманий байт.

 

Якщо ви точно знаєте в якому з чотирьох режимів працює ваш пристрій з котрим хочете комунікувати - то, власне, схема обмежиться двома оцими регістрами, можливо зо два корпуси "клею" щоб формувати клок в правильні моменти, жменя тумблерів - для вводу байта і сигналу SS, і жменя світлодіодів - для відображення отриманого байта. Клок - на що фантазії вистачить, теж можна кнопку.

 

А 20 корпусів логіки - звучить як спроба зробити більш універсальний контроллер. Зі спортивного інтересу - чом би і ні, звичайно. Але я все-таки зробив би на Ардуїні :-)

1

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Дякую за розгорнуту відповідь. У мене випадок попростіше. З'вязок односторонній, пакет в 24 біт, з шини DATA в регістр приймача біти переписуються фронтом синхронізації, по спаду синхроімпульса  регістр зсувається на крок, фронт по шині LE фіксує дані в приймачу. В даташиті на мікруху все детально росписано. 24 тумблери для ввода бітів + MUX.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Нормальний такий пульт у вас вийде :-)

 

Якщо не секрет - чому саме ви вирішили робити 24 тумблери? Можна було обійтись одним байтовим регістром, і просто відправити три байти по черзі по одному. Тобто - виставили SS, внесли в регістр перший байт - відправили, внесли другий байт - відправили, третій, потім зняли SS. SPI не регламентує затримки між байтами, тобто їх не обов'язково відправляти зразу підряд. Єдине що якщо приймач очікує пакет - то за період відправки пакету SS не має зніматись. Такий підхід трохи ускладнить роботу оператора, але сильно упростить схему (ну, фактично - разів в три)

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Мікруха чекає пакет в 24 біти, шина LE (я так розумію це та, яку Ви називаєте SS) задає вікно під пакет. Дробити буде дуже незручно, там і так , щоб повністю залити всі хотєлки синтезатора ADF4113 треба чотири пакети по 24 біт. Схема вийшла й так проста, спрощувати нічого, це-ж не під сотню корпусів вийшло. Повитягував свої макетки з 80-х, сижу паяю, думаю до завтра щось да вийде.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Зрозуміло. Цікаво подивитись на результат - якщо ви не проти показати :-)

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Майже все спаяв, залишився MUX одиночний пакет-серія пакетів. Не обійшлось без прикрих помилок при розробці схеми, куди без них, булеву алгебру вже видно призабув, вік. Зараз бітики весело забігали. Так зараз виглядає шина LE (перший канал) і CLC (другий канал) на аналоговому і цифровому осцилографах відповідно.

31.jpg

32.jpg

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Доброго дня. Ось така макетка вийшла, все як у моїй молодості :). Працює чудово, єдине можливо колись добавлю по виходу буфер з третім станом.

Тема себе вичерпала.

50.jpg

2

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

З усіма цими радянськими деталями, макеткою - виглядає дуже антуражно :-) Радий що у вас все вийшло так як ви хотіли.

 

До слова - я маю кілька радянських макеток, подібних до вашої. Не користуюсь, бо в них крок 2.5мм. А я в основному імпорт паяю, з кроком 2.54 - вони погано в ті макетки влазять. Якщо хочете - можу вам спрезентувати (тобто зовсім задурно :-) з вас тільки доставка)

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах
, memoliza написав:

Якщо хочете - можу вам спрезентувати

Дякую за пропозицію, та якщо потрусити закрома, то в себе ще знайду. До речі користуватись такими переключателями я на платі дуже не зручно, це для разових установок. Думаю прикупити 25шт мікриків і зробити повнорозмірну лінійку з номерами, щоб кожний раз не перераховувати при установці.

0

Поділитися повідомленням


Посилання на повідомлення
Поділитися на інших сайтах

Створіть акаунт або увійдіть для коментування

Ви маєте бути користувачем, щоб залишити коментар

Створити акаунт

Зареєструйтеся для отримання акаунта. Це просто!


Зареєструвати акаунт

Увійти

Вже зареєстровані? Увійдіть тут.


Увійти зараз

  • Зараз на сторінці   0 користувачів

    Немає користувачів, які переглядають цю сторінку