Чи є різниця між використанням вбудованого модуля SPI та біт-ударом?


25

Чи є різниця між ними, або це лише питання абстракції? Моя інтуїція говорить, що немає різниці, але я хотів би помилитися.


1
Залежить від того, наскільки ви хороші в бит-ударах. Дивіться code.google.com/p/fastspi і awaforbigo.com :-)
Роберт Аткінс

Відповіді:


33

Фактична периферійна контролер SPI в MCU часто може працювати набагато швидше, ніж розрядність інтерфейсу. Звичайно, це залежить від MCU, але це не здивувало б мене, коли я побачив контролер SPI, що працює на 30+ МГц, в той час як біт-стук може бути обмежений приблизно 1 МГц (якщо пощастить).

Але в цьому є більше, ніж у цьому. Під час розбиття бітів MCU зайнятий біт-ударом. Це переміщення даних і змінення ліній GPIO. Це означає, що нічого іншого робити не можна. Під час використання контролера SPI, контролер зайнятий всіма цими речами, і MCU вільний робити інші речі.

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


11

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

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


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

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

6

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

Через це задіяти майстра SPI у прошивці справді досить просто. Я часто це робив як зручність для використання певних штифтів, коли не було вбудованого обладнання SPI або не було доступно для цієї мети з будь-якої причини. Зробити майстра SPI в прошивці приблизно так само просто.

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

Є деякі переваги, як робити SPI-майстер у прошивці. Інструменти SPI іноді трохи жорсткі в тому, як його можна налаштувати. Завжди виникає питання про те, що саме повинно відбутися негайно при затвердженні вибору рабів. Перший біт записується в рядки даних тоді? Що робити, якщо годинник починається низько, а лінії даних повинні бути зафіксовані на падаючій грані? Іноді це має значення, іноді це не так. З майстром програмного забезпечення SPI ви можете прощати і, можливо, використовувати один і той же розпорядок спілкування з різними рабами. Наприклад, ви можете переконатися, що лінія даних MOSI (Master Out Slave In) є стабільною на обох краях годин. Апаратне забезпечення SPI, як правило, цього не робитиме, тому таке обладнання потрібно буде перенастроювати залежно від того, з яким рабом він спілкується на той час.

Ще одна перевага майстра прошивки SPI полягає в тому, що ви можете обрати довільну кількість бітів на послідовність SPI. Зазвичай обладнання обмежені кратними 8 бітами. Більшість пристроїв розроблені таким чином, щоб вони могли переносити цілі байти, але часто їх не потребують. Наприклад, 10-розрядний A / D, швидше за все, спочатку надішле 10 бітів даних, після чого надсилатиме 0 або сміття, якщо ви продовжуєте його записувати. Якщо ви використовуєте апаратний SPI, вас змусять перенести 16 біт і замаскувати сміття. Все буде добре, але майстер програмного забезпечення SPI може насправді бути швидшим, ніж апаратне забезпечення в цьому випадку, через це лише перенесення мінімально необхідних 10 біт.

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

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

Ви можете робити невільників SPI в прошивці, але це складно, вам потрібно ретельно рахувати цикли та затримки, і зазвичай ви в кінцевому підсумку реалізуєте деякий підмножина протоколу, який ви знаєте, який використовує ваш конкретний майстер. Наприклад, одного разу мені довелося спроектувати цифровий еквівалент старої аналогової плати контролера (вони хотіли додаткових функцій, які неможливо зробити аналоговими, і вони хотіли чогось меншого, дешевшого виготовлення та більш стабільного). Ця плата поєдналася з рештою системи через шину SPI. Стара аналогова плата мала двоканальний D / A для встановлення контрольних значень та двоканальний A / D для зчитування назад вимірюваних значень. Реалізація обох в одному процесорі була складною, і вона включала в себе з'ясування того, який підмножина апаратних D / A та A / D SPI-протоколів фактично використовував існуючий майстер. Він також охоплював процесор, який міг би працювати значно швидше, ніж тактова частота SPI. Зрештою, я застосував три переривання, по одному для кожного вибору підлеглого і один для висхідного краю лінії годинника. Цей останній повинен був стати перебором з найвищим пріоритетом у системі, інакше вимогу про затримку не вдалося виконати.

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


Ви знайшли будь-які реалізовані підлеглі мікроконтролери, які можуть вести себе як типові апаратні SPI-пристрої (наприклад, дозволяють майстру надавати перевагу CS та читати стан у будь-який час, а CS використовувати для позначення меж команд? Більшість реалізацій, яких я бачив, не мають навіть повідомляйте, чи існував перехід CS між поточним байтом та попереднім.
supercat

@supe: Так, це проблема. Запропоновані апаратні засоби SPI зазвичай ігнорують тактові та вхідні дані та зберігають лінію вихідних даних на високому опорі, коли вибір чіпа не затверджується, але він зазвичай не повідомляє, де знаходяться межі вибору мікросхеми. Принаймні, з обладнанням PIC SPI, яке я пам’ятаю, я використовував, вам доведеться встановити власний перерив на виборі чіпа для цього.
Олін Латроп

Мені було цікаво, чи знаєте ви про якісь гідні реалізації. Я думаю, що не. Проблема використання апаратного переривання на дроті вибору полягає в тому, що якщо перехід на виділеному проводі відбувається дуже скоро після відправлення байта, ведений може важко вирішити, чи стався він до або після відповідного байта. Мені здається дивним, що майже кожен чіп має підлеглий варіант SPI, але, схоже, жоден з них насправді не може бути використаний як типовий пристрій-підлеглий апарат SPI. Ситуація частково нагадує процесор підлеглого порту на ПОС по порівнянні з 8048.
SUPERCAT

У підлеглому порту процесора 8048 є адресний контакт; коли дані зовнішньо записуються на 8048, 8048 фіксує стан цього штифта та робить його доступним для його коду (зазвичай перший байт команди буде записаний на одну адресу, а параметри чи дані - на іншу). Прочитання однієї адреси дасть все те, що введений там код 8048, але деякі біти, які зчитуються з іншої адреси, генеруються апаратним забезпеченням 8048, щоб вказати, чи готовий він читати чи записувати дані.
supercat

+1, щоб вказати на різницю, який полягає в тому, що біт-хат-майстер (легко) і раб (набагато складніше).
tcrosley

1

Це залежить від того, для чого ви робите SPI. Якщо ваш інтерес отримує найвищі показники швидкості передачі даних, апаратне забезпечення завжди швидше, ніж бітбінг (наприклад, мікросхема кори руки в підлітковому періоді 3. Я можу виштовхувати дані на швидкості 22 Мбіт / с за допомогою апаратної підтримки SPI, порівняно з ~ 4,5 Мбіт / с з бітбангігом (це також може обробляти довільну кількість бітів за передачу від 3-16 - корисно при надсиланні даних у 12 бітових фрагментах для певних контролерів led!)). Що стосується 16 МГц, різниця трохи менш екстремальна, найвища швидкість передачі даних із апаратним забезпеченням висока 4 / низькі 5 Мбіт / с, тоді як бітбінг - близько 2,3 Мбіт / с).

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

Все вищезазначене залежить від того, є апаратний SPI навіть варіантом.


0

Якщо ви розбиваєте SPI, ви не можете використовувати переривання SSP для обробки зв'язку. Це не так важливо для SPI для багатьох застосувань


1
Жодного конкретного процесора не було зазначено, тому "переривання SSP" є безглуздим терміном у цьому контексті.
Олін Латроп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.