Если я использую clock_prescale_set в своем скетче, я потеряю доступ к adafruit feather 32u4?
Я хочу запустить свой 32u4 на частоте 2 МГц. Согласно gammon, это увеличит потребление на 4 мА во время работы. Насколько я понимаю, это изменяет скорость всех шин, таких как UART, USB, I2C и SPI. Вероятно, у меня возникнут проблемы, поскольку я подключил устройства ко всем шинам. Самое главное, я боюсь, что потеряю соединение при перепрограммировании через USB (adafruit feather 32u4).
Итак, загрузчик будет в порядке, если clock_prescale_set(clock_div_4); после сброса устройства, или мне потребуется программирование ISP для повторного получения доступа?
Я не хочу сейчас играть с предохранителями.
* например, SPI в настоящее время работает с SPISettings(4000000,...), так что полагаю, мне придется использовать 1 МГц, так как 2 МГц будет пределом?
** I2C в Arduino работает на частоте 100 кГц. Значит, мой микроконтроллер на 2 МГц должен подойти?
@krg, 👍0
Обсуждение1 ответ
Лучший ответ:
Если я использую clock_prescale_set в своем скетче, я потеряю доступ к adafruit feather 32u4?
Краткий ответ: «нет».
Все ссылки в технических описаниях основаны на этой версии. Вам необходимо изучить её и провести несколько тщательных экспериментов, чтобы понять, как она работает на самом деле.
Насколько я понимаю, это изменяет скорость всех шин, таких как UART, USB?, I2C? и SPI?.
Это справедливо только для всех названных периферийных устройств, кроме USB. На рисунке 6.1 показана система синхронизации.
Для USB-модуля требуется тактовая частота 48 МГц (глава 21.2), которая генерируется с помощью ФАПЧ из входного тактового сигнала частотой 8 МГц.
Как показано на рисунке 6.1, ФАПЧ отбирает тактовый сигнал до предварительного делителя частоты для системного тактового сигнала. Поэтому вы можете использовать любой делитель частоты предварительного делителя частоты, он не изменит тактовый сигнал USB. (Если вы вообще используете USB в своём приложении.)
Более того, я боюсь, что потеряю соединение, чтобы перепрограммировать его через USB (adafruit feather 32u4).
Поскольку загрузчик запускается до вашего приложения, последнее не меняет настройки часов первого. Поэтому, нет, ваш загрузчик продолжит работать.
Итак, загрузчик будет в порядке, если clock_prescale_set(clock_div_4); после сброса устройства или мне понадобится программирование ISP для повторного получения доступа?
Сброс также сбросит регистры, в частности CLKPS[3..0] будет равен 0000 или 0011, в зависимости от предохранителя CKDIV8 (глава 6.11.4).
Смотрите выше, с загрузчиком всё будет в порядке. Он сам установит необходимые значения.
Например, SPI в настоящее время работает с SPISettings(4000000,...), поэтому я полагаю, что мне придется использовать 1 МГц, так как 2 МГц будет пределом?
SPI использует предделитель, делящий частоту как минимум на 2. Если вы хотите использовать системную тактовую частоту 2 МГц, максимальная частота SPI составит 1 МГц (fOSC/2) в режиме ведущего SPI. В режиме ведомого SPI максимальная частота SPI может достигать 500 кГц (fOSC/4).
Все подробности в главе 17.
Шина I2C в Arduino работает на частоте 100 кГц. Значит, мой микроконтроллер на 2 МГц подойдёт?
Согласно главе 20.5.2, максимальная частота SCL составляет fOSC/16. Таким образом, возможно значение 100 кГц.
Примечание: В первой версии моего ответа у меня сложилось впечатление, что автор вопроса планировал заменить внешний кристалл. Это была моя ошибка.
Спасибо за аналитический ответ и ссылки на технические данные. Ого, похоже, это мастер-игра. Извините, я не знал, что эта информация есть в описании, хотя и читал его по другим причинам. Я надеялся, что у загрузчика есть своя команда-разделитель для значений по умолчанию, чтобы не потерять доступ. Спасибо ещё раз., @krg
@krg Извините за неудобства, я неправильно понял ваш вопрос. На самом деле всё наоборот, так что просто продолжайте и экономьте ток., @the busybee
Не волнуйтесь. Вы очень помогли, даже несмотря на ошибочное предположение. Так что никаких рисков нет, поскольку загрузчик сбросит делитель тактовой частоты. Отлично! Проблема, как я вижу, в том, что мне нужно изменить скорость UART (бит/с) — один используется для отладки, другой — для GPS, — а также, возможно, SPI и I2C для других периферийных устройств. Возможно, модули не поддерживают разные скорости. СПАСИБО!, @krg
Сегодня мне удалось протестировать, и всё прошло почти нормально. В adafruit feather 32u4 я теряю отладочный последовательный порт со всеми делителями, кроме _div_2. Также теряется соединение UART. Я пробовал скорость 9600 * 2, но соединение ненадёжное.
Но с другим устройством с последовательным портом FTDI я перешёл на _div_32. UART не проверял. Но SPI работает без каких-либо изменений. I2C не проверял. Я перешёл с 12 мА на 1,6 мА. Это здорово.
@the busybee: СПАСИБО!, @krg
- Можно ли загрузить скетч Arduino через последовательный порт (RX) вместо USB?
- Путаница с ATmega328P и 3,3 В/8 МГц
- Флэш-прошивка с шестнадцатеричным файлом по последовательному порту с Python (без avrdude, Arduino IDE)
- Запись загрузчика на Adafruit Feather 32u4
- Atmega328p — переход на низкое энергопотребление 1,8 В с использованием генератора 4 МГц — прошивка загрузчика
- Atmel atmega32u4 не распознается при подключении по USB после попытки прошить новый загрузчик
- добавить идентификационный номер в загрузчик feather m0 (флеш)
- 32u4 с использованием внутренних часов на пользовательской печатной плате — загрузка скетча
1) Для USB требуется тактовая частота 48 МГц. Если вы хотите сохранить доступ к USB, предделитель частоты ФАПЧ (см. рис. 6-1. Распределение тактовой частоты в техническом описании ATmega32U4) должен быть либо 8 МГц, либо 16 МГц, поэтому для USB-порта можно использовать только
clock_prescale_set(clock_div_2). 2) Максимальная скорость SPI для ведомого устройства SPI составляет F_CPU/2 или F_CPU/4. Вся эта информация доступна в техническом описании., @hcheungДействительно, подходит только
_div_2. Но учтите, это4Mhz, а не8Mhz. SPI просто работает, я ничего не менял. Перешёл к_div_32, @krg