Программирование автономного 328P в цепи

Я проектирую печатную плату с использованием 328P. Насколько я понимаю, я могу либо запустить чип через заголовок ICSP (без загрузчика), либо через Serial (если у него уже есть загрузчик). Но как работает программирование?

  1. В соответствии с моей программой, запущенной на чипе, она действует как мастер для периферийных устройств SPI. Если вы используете ICSP, как чип знает, что он должен действовать как подчиненный SPI и получать программу?

  2. Есть ли что-нибудь, что я должен учитывать в отношении того, что связано с контактами SPI? то есть это вредит каким-либо образом, если у меня есть другие ведомые SPI на плате, подключенные к этим же контактам?

  3. То же самое для последовательного программирования: как чип знает, что он должен получать программу на последовательном интерфейсе, когда мое приложение использует этот порт для другой цели?

1 голос | спросил travelboy 20 12017vEurope/Moscow11bEurope/MoscowMon, 20 Nov 2017 12:34:26 +0300 2017, 12:34:26

3 ответа


1
  

В соответствии с моей программой, запущенной на чипе, она действует как мастер для периферийных устройств SPI. Если вы используете ICSP, как чип знает, что он должен действовать как подчиненный SPI и получать программу?

Специальный сигнал отправляется с помощью булавки RESET. Из техническое описание (p361) :

  
  1. Последовательность включения: подайте питание между VCC и GND, в то время как RESET и SCK установлены на «0». В некоторых системах программист не может гарантировать, что SCK удерживается на низком уровне во время включения питания. В этом случае для сброса RESET должен быть задан положительный импульс, по меньшей мере, двух тактовых циклов процессора после того, как SCK установлено на «0».
  2.   
  3. Подождите не менее 20 мс и включите последовательное программирование, отправив последовательную инструкцию по программированию для подключения MOSI.
  4.   
  5. Инструкции по серийному программированию не будут работать, если связь не синхронизирована. При синхронизации. второй байт (0x53) будет откликнуться при выдаче третьего байта инструкции программирования. Правильно ли эхо-сигнал или нет, все четыре байта инструкции должны быть переданы. Если 0x53 не откликнулся назад, дайте СБРОС положительный импульс и выполните новую команду программирования.
  6.   

  

Есть ли что-нибудь, что я должен учитывать в отношении того, что связано с контактами SPI? то есть это вредит каким-либо образом, если у меня есть другие ведомые SPI на плате, подключенные к этим же контактам?

Да. Возможно, что чип может реагировать на сигналы ICSP. У вас должны быть нагрузочные резисторы на всех ваших CS (или SS, если вы предпочитаете это называть), на всех ваших подчиненных чипах, так что, хотя ATMega328P находится в режиме программирования (и все контакты GPIO в режиме INPUT по умолчанию), CS контакты ваших рабов не плавают.


  

То же самое для серийного программирования: как чип знает, что он должен получать программу на последовательном интерфейсе, когда мое приложение использует этот порт для другой цели?

Простой: он прослушивает в течение 2 секунд после включения или сброса для специальной последовательности байтов, поступающих на последовательный порт. Если они прибудут в это 2-секундное окно (8 секунд для плат на базе ATMega32U4, чтобы обеспечить время для перечисления USB), загрузчик продолжает работать и ищет инструкции по программированию. Если он не видит эту начальную последовательность в течение таймаута, она выходит из загрузчика и запускает ваш эскиз.

Протокол STK500 (в котором находится загрузчик Arduino) подробно описан здесь , Триггерная последовательность представляет собой команду «CMD_SIGN_ON», подробно описанную на стр. 4.

ответил Majenko 20 12017vEurope/Moscow11bEurope/MoscowMon, 20 Nov 2017 13:42:48 +0300 2017, 13:42:48
1
  1. Вы нажимаете кнопку сброса LOW.
  

Оба массива памяти Flash и EEPROM могут быть запрограммированы с использованием последовательной шины SPI, а RESET - в GND. Последовательный интерфейс состоит из контактов SCK, MOSI (вход) и MISO (выход). После того, как RESET установлен на низком уровне, команда программирования Enable должна выполняться сначала до того, как будут выполнены операции программы /стирания.

  1. У большинства устройств SPI имеется вывод Chip Select. Если этот контакт не читает LOW, устройство не прослушивает. Таким образом, вы можете иметь несколько устройств, совместно использующих одну шину SPI.

  2. Вы на мгновение вытаскиваете вывод сброса LOW. Это заставляет чип перезагружать себя. Когда чип сбрасывается, он сначала запускает программу загрузчика. Загрузочный загрузчик Arduino ждет 3 секунды для любых инструкций программирования, поступающих через последовательное соединение. Если эти 3 секунды прошли, он выйдет из загрузчика и запустит ваш основной эскиз.

ответил Gerben 20 12017vEurope/Moscow11bEurope/MoscowMon, 20 Nov 2017 13:43:11 +0300 2017, 13:43:11
0
ответил filo 20 12017vEurope/Moscow11bEurope/MoscowMon, 20 Nov 2017 15:03:52 +0300 2017, 15:03:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132