Відповіді:
Фактична периферійна контролер SPI в MCU часто може працювати набагато швидше, ніж розрядність інтерфейсу. Звичайно, це залежить від MCU, але це не здивувало б мене, коли я побачив контролер SPI, що працює на 30+ МГц, в той час як біт-стук може бути обмежений приблизно 1 МГц (якщо пощастить).
Але в цьому є більше, ніж у цьому. Під час розбиття бітів MCU зайнятий біт-ударом. Це переміщення даних і змінення ліній GPIO. Це означає, що нічого іншого робити не можна. Під час використання контролера SPI, контролер зайнятий всіма цими речами, і MCU вільний робити інші речі.
Тож із фактичним контролером SPI фактична передача SPI відбувається набагато швидше, і MCU повертає деякі цикли, які він може використовувати для інших дій.
Немає різниці в тому, що ви можете досягти одного і того ж результату, використовуючи обидва методи, але є кілька причин, чому ви б обрали один над іншим.
Використання периферійних пристроїв SPI позбавить процесора від необхідності піклуватися про створення часу для розбиття бітів штифтів вводу / виводу, дозволяючи виконувати інші обчислювальні завдання та спрощує програмування процесора. Оскільки периферійна частина реалізована в апаратному забезпеченні, вона працюватиме швидше і використовуватиме менше енергії, ніж біт-стукіт вводу-виводу. Можливо, у вас є випадки, коли ви хочете трохи підключити введення-виведення для інтерфейсу з SPI, якщо ваша програма вимагає обрати процесор без периферійного інтерфейсу SPI. З міркувань розуму я рекомендую уникати цього, якщо це абсолютно не потрібно.
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. Якщо ваш інтерес отримує найвищі показники швидкості передачі даних, апаратне забезпечення завжди швидше, ніж бітбінг (наприклад, мікросхема кори руки в підлітковому періоді 3. Я можу виштовхувати дані на швидкості 22 Мбіт / с за допомогою апаратної підтримки SPI, порівняно з ~ 4,5 Мбіт / с з бітбангігом (це також може обробляти довільну кількість бітів за передачу від 3-16 - корисно при надсиланні даних у 12 бітових фрагментах для певних контролерів led!)). Що стосується 16 МГц, різниця трохи менш екстремальна, найвища швидкість передачі даних із апаратним забезпеченням висока 4 / низькі 5 Мбіт / с, тоді як бітбінг - близько 2,3 Мбіт / с).
Крім того, якщо ви користуєтесь апаратною підтримкою, знову ж таки, залежно від відповідного мікроконтролера, у вас є доступні варіанти використання DMA-контролерів для перенесення даних, дозволяючи вашому коду повернутися до інших, потенційно цікавіших речей, ніж ведення даних писати.
Все вищезазначене залежить від того, є апаратний SPI навіть варіантом.
Якщо ви розбиваєте SPI, ви не можете використовувати переривання SSP для обробки зв'язку. Це не так важливо для SPI для багатьох застосувань