LINUX.ORG.RU

Как выбрать частоты тактирования?

 , тактирование


2

1

Пишу прошивку для девайса. Он в том числе взаимодействует с ПК по USB.

Имеется внешний кристалл на 25 МГц. Имеется внутренний резонатор на 8 МГц. Также имеется два внутренних умножителя и набор делителей.

Для USB-периферии я из 25 МГц получаю 48 (25 / 5 * 8 / 10 * 12).

SYS тактирование я могу выбрать либо от этих 48, либо от кристалла (25) напрямую, либо от внутреннего резонатора (8). Сейчас я беру 48.

Далее я через множитель могу это значение поделить и настроить частоту AHB шины. Сейчас я делю на 8, получаю 6 МГц. На этой частоте работает процессор.

Далее мне нужно получить частоты для шин APB1 и APB2. Сейчас я APB1 делю на 16, получаю 375 kHz и APB2 делю на 4, получаю 1.5 MHz.

Собственно это всё я настроил исходя из принципа - чем меньше, тем лучше. На 3 МГц у меня USB не завёлся, соответственно поставил 6.

На шине APB2 у меня крутится таймер, через который я делаю микросекундные задержки для USB, поэтому её тактирую повыше (таймер использует двойную частоту, 3 МГц).

Каких-то требований на данный момент у меня нет (точней они такие небольшие, что подойдёт что угодно, к примеру у меня ещё будет SPI, для которого нужна скорость не ниже 110 КГц и передавать данные по USB я буду со скоростью примерно 15 КБ/с.

Есть ли какие-то соображения, по которым стоит запитать AHB шину не от делителя USB? Если запитывать от 25 МГц кристалла, то делить на ровные числа не получается, а частота в 25 МГц мне кажется избыточной, хотя изначально так и делал. Запитывать от 8 МГц резонатора кажется странным при наличии внешнего кристалла.

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

★★★

Ты же про STM32 говоришь? Если да, то по опыту могу сказать, что не все доступные комбинации делителей у итоге позволяют микроконтроллеру заработать. Возьми куб и настрой частоты в его частотонастраивалке. Потом просто полученные значения делителей скопируй в свой проект.

apt_install_lrzsz ★★★
()

Запитывать от 8 МГц резонатора кажется странным при наличии внешнего кристалла.

Ещё имей ввиду, что внутренний источник тактирования менее стабильный, нежели внешний. От внутреннего USB будет иметь проблемы при обмене данными, а то и вообще не заработает.

apt_install_lrzsz ★★★
()
Ответ на: комментарий от COKPOWEHEU

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

vbr ★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 1)

Имеется внутренний резонатор на 8 МГц

Думаешь тебе в корпус микросхемы засунули кварц? Там небось генератор на RC цепочке, у которого частота плывёт в зависимости от погоды на Марсе.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Ну да, так и есть. Но в общем-то какая разница. Для USB кварц используется, это понятно, там требования конкретные, а для всего остального - ну плывёт и пусть плывёт.

vbr ★★★
() автор топика
Ответ на: комментарий от ox55ff

Один из юз-кейсов - работа от планшета. Он на батарее

Я бы сначала прикинул сколько контроллер потребляет с разными настройками. Может, эти ваши пляски с частотами жалкие 3% экономят.

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

либо от кристалла (25) напрямую, либо от внутреннего резонатора (8)

Да, не забывайте, что встроенный RC-генератор тоже можно отключить. Потребление у него, правда, мизерное, и много на этом не выиграть, но все же.

Думаешь тебе в корпус микросхемы засунули кварц?

Ну, в даташите прямо пишут, что RC-генератор. Но вот дальше интереснее. У USB ведь есть своя система синхронизации, и, как я слышал, некоторые контроллеры умеют по ней подстраивать частоту модуля. Кажется, это умеет даже vusb, который вообще софтовый.

С другой стороны, важно ведь чтобы тайминги не разъехались за время передачи одного пакета. Делаем пакет поменьше, и допуск по частоте повышается.

COKPOWEHEU
()

Я бы ставил всё по максимуму. Как отладится прошивка, можно уже будет подумать о снижении частот. Если эта экономия имеет смысл вообще. При питании от usb пара десятков мА... спички.

Slavik763
()
Последнее исправление: Slavik763 (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Думаешь тебе в корпус микросхемы засунули кварц? Там небось генератор на RC цепочке, у которого частота плывёт в зависимости от погоды на Марсе.

Вот, кстати. Кто мне расскажет почему кварцы прямо в корпус не пихают? Я понимаю, что разные тех процессы и все такое, но ведь все равно, на каком-то этапе, к кристалл припаивают ножки и это все потом «заливают эпоксидкой». Почему бы нва этом этапе не припаять ещё и кварец с парой кондеров?

pihter ★★★★★
()
Ответ на: комментарий от pihter

Вот, кстати. Кто мне расскажет почему кварцы прямо в корпус не пихают?

Кварцевый кристалл и сам по себе достаточно большой, не во всякий корпус влезет. Плюс его нельзя заливать пластиком, он ведь колебаться должен. Не просто так корпус кварцевого резонатора обычно металлический. И риск механического повреждения: это ведь пластинка кристалла, висящая на проводящих волосинках. А ну как от вибрации отвалится.

А главное, далеко не для всех применений кварц нужен - проще оказывается откалибровать RC-генератор до 1% и даже подстраивать на ходу.

COKPOWEHEU
()