Arduino не загружается при загрузке линий SPI

я подключил Arduino Nano к внешней flash SPI, используя ЭТОТ учебник (русский) и библиотеку SPIMemory. Во время доступа к Flash работает хорошо, я столкнулся со следующей проблемой:

Проблема: Когда линия SPI MISO вытягивается высоко flash во время загрузки Arduino, она не запускается, например, потому, что была перезагружена при доступе к flash. Я должен выключить Flash, прежде чем она снова загрузится. Но даже тогда это занимает необычно много времени.

Я знаю, что Atmega328p позволяет перепрограммировать через SPI, но, насколько мне известно, это не должно вызывать такого поведения, так как линии SPI не меняются (запуск режима программирования потребует отправки команды сразу после перезапуска). Есть ли способ предотвратить такое поведение? (Кроме отключения программирования SPI через биты предохранителей, это был бы мой последний выбор)

ПРАВКА

Программирование Arduino через ISP действительно работает, однако я добавил несколько последовательных резисторов к flash, чтобы предотвратить случайное управление линиями SPI из нескольких источников.

Проблема, похоже, исходит из линии MISO, когда она тянется к VCC, Arduino не запускается. Это нигде не упоминается в технических паспортах, и я не знаю, как предотвратить это (скетч ниже, чтобы показать проводку).

, 👍2

Обсуждение

Можете ли вы записать загрузчик/прошить скетч через интернет-провайдера? Если вы удалите загрузчик, вы сможете узнать, там ли он висит., @Sim Son

@SimSon Я провел несколько тестов, я также добавлю результаты в сообщение: запись через интернет-провайдера действительно работает, однако я добавил несколько последовательных резисторов во Flash, чтобы предотвратить появление нескольких драйверов в одной строке. Запись прошивки без загрузчика значительно ускоряет запуск arduino, но не предотвращает его замораживание, когда линии SPI вытягиваются Flash. Линия МИСО, по-видимому, является основной проблемой, когда она подключается к VCC, Arduino не запускается., @Sabulanis

откуда вы на самом деле знаете, что он "замерзает"? Если это все еще происходит без загрузчика, то, похоже, это вызвано вашим скетчем. возможно, вы также захотите включить схему подключения, @Sim Son

@SimSon я отредактировал программу так, чтобы она включала индикатор состояния nano в самом начале. Светодиод остается темным до тех пор, пока я не вытащу линию МИСО из nano, затем он сразу же загорается, @Sabulanis


1 ответ


Лучший ответ:

1

Честно говоря, я не могу себе представить, почему такой скетч будет висеть в этом сценарии. Но я уверен, что мой ответ может решить эту проблему.

Я предполагаю что происходит следующее: Flash выбирается (CS вытягивается низко atmega) в тот момент, когда происходит сброс. В этот момент мастер перестанет генерировать тактовый сигнал, и CS будет плавающим. Таким образом, Flash не будет надежно снята из-за плавающего CS, и МИСО останется в том состоянии, в котором оно было до сброса (ВЫСОКОЕ, если оно передавало логику 1, НИЗКОЕ для 0). В принципе, SPI-коммуникация flash будет застрять с активным подтягиванием МИСО к логическому максимуму или минимуму.

IDK, почему это приводит к зависанию скетча, но если вы добавите подтягивающий резистор к CS flash, он должен быть деактивирован по умолчанию (а также после сброса atmega, так как контакты по умолчанию будут входными/плавающими). В результате flash не может активно тянуть МИСО и поэтому должна вообще почти не влиять на atmega.

Я предлагаю вам добавить упомянутый подтягиватель и посмотреть, имеет ли это какое-то значение. Если это не так, я удалю этот ответ, но он был слишком длинным для комментария ;).

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

,

Спасибо, это действительно работает! Я также добавил слабое снижение на линии МИСО, чтобы быть уверенным, но это, похоже, не является действительно необходимым., @Sabulanis

@Sabulanis Я только что увидел, что у вас также нет подтяжки на штифте сброса. Это могло быть проблемой, стоящей за этим, @Sim Son