Доброго всем времени суток. Имееется плата SK-MAT91SAM9260, необходимо чтобы устройство уходило в спящий( возможно другой) режим при мизерном энергопотрнблении и по сигналу с внешнего контроллера просыпалось, причем крайне желателен(чуть ли не обязательно) быстрый запуск. Нашёл в схеме платы перемычку J11 - соединенную с WKUP контроллера и J16 -для батарейки.
1) Как подключить батарейку( по документации 3В).
2) Как будить устройство по сигналу внешнего контроллера.
3) Как в Linux отправить устройство в нужный (спящий) режим.
backup mode в спецификации идеально подходит, но вопрос как быстро из него выходит Linux.
Имхо тут только suspend to ram - он для at91sam926x поддерживается. Я никогда не пользовался, так что даже не знаю как можно вывести из спящего режима. Других методов я больше не слышал.
WKUP управляет выходом SHDN в "выключенном" состоянии (т.е. когда подано только VDDBU), он позволяет реализовать "кнопочное" включение/выключение питания без вспомогательной логики/контроллера, если стабилизатор поддерживает управление своим выходом (причем активный - 1.8В) ...
Не знаю, поможет ли он Вам в реализации малого энергопотребления, но если что откапаете, отпишитесь плиз, думаю многим будет интересно.
Нашёл интересный документ по этой теме: http://www.atmel-grenoble.com/dyn/resources/prod_documents/doc6217.pdf . Там есть схема подключения батарейки и описание режимов. К сожалению мой английский страдает, поэтому я не всё там понял, если кто мне поможет буду очень признателен.
Там еще есть примеры в виде отрывков программ, в которых все действия осуществляются манипуляциями регистров, как эти манипуляции можно проводить в программах для linux, и есть ли какие нибудь библиотеки для этого?
Насколько я понял выход SHDN нуден для управление DC/DC преобразователем со входом управления, как например http://www.mean-well.ru/mw/asd10h-s-spec.pdf , а вход WKUP - программируемый через Shutdown Controller
Я вообще то о linux говорил :) В buckup mode снимается питание полностью с периферии и памяти - для linux это равнозначно reset (как собственно для любой другой ос) - так что о быстром старте можно забыть. Единственный метод при котором будет быстрый старт - suspend to ram, причем драйверами atmel этот режим поддерживается. Генератор переключается на пониженную частоту 32 кГц, процессор останавливается в ожидании прерывания, вся периферия с питанием и соответственно содержимое регистров не теряется, в том числе ram. linux еще поддерживает suspend to disk - но это уже должна быть поддержка типа bios или внутреннего загрузчика для быстрой инициализации периферии и загрузки снапшота ram.
А сколько длится полная загрузка линукса на данном устройстве?
И хотелось бы узнать как suspend to ram организовать и как из него выйти.
И ешё такой вопрос: какое примерно потребление платы в активном и suspend to ram режимах, питание устройства предполагается осуществлять от бортовой сети автомобиля и соответственно с выключенным двигателем аккумулятор не должен быстро садится, а с другой стороны при запуске автомобиля устройство должно быть быстро готово к работе. Идея такая: на плате SK-MAT91SAM9260 центральное устройство, которое входит в режим suspend to ram когда автомобиль не используется и так называемый sleep-контроллер на какой-нибудь ATmega, который работает постоянно и при запуске автомобиля(возможно дистанционном) будит центральный блок ну и еще выполняет пару функций. Вот и получается некоторая оптимизационная задача относительно [время разряда аккумулятора/время старта системы]
Конкрено на этом не знаю но на подобной плате меньше 3 сек врядли получится.
"Все уже своровано до нас " С :) Достаточно в конфиге включить и собрать ядро с поддержкой suspend to ram, войти очень просто, помоему достаточно будет вот этого
#echo mem > /sys/power/state
а вот проснуться я не интересовался как :) надо поискать на буржуйских форумах, я думаю через внешние прерывания, может быть от какой-то периферии умеет просыпаться - надо искать, исходники смотреть.
Судя по исходникам самое подходящее для вас просыпаться от gpio и если я правильно понял вот это, такое возможно
static struct gpio_keys_button yl9200_buttons[] = {
{
.gpio = AT91_PIN_PA24,
.code = BTN_2,
.desc = "SW2",
.active_low = 1,
>>> .wakeup = 1, <<<
},
похоже где-то в драйверах для устройств тоже ставятся метки - может ли irq этого устройства быть источником wakeup. И еще похоже некоторые периферийные устройства засыпают намертво и их нужно переинициализировать.
Не удержался - попробовал, оставил одну кнопку в board-файле, включил s2ram в ядре, собрал:
# echo mem > /sys/power/state
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.00 seconds) done.
Freezing remaining freezable tasks ... (elapsed 0.00 seconds) done.
Suspending console(s) (use no_console_suspend to debug)
уснул :) попинговал, в консоли потыкал - не откликается, замкнул проводком пин землю:
mmc0: card 0001 removed
AT91: PM - no slow clock mode enabled ...
usb usb1: root hub lost power or was reset
mmc0: new MMC card at address 0001
mmc mmc0:0001: parent mmc0 should not be sleeping
mmcblk0: mmc0:0001 AF HMB 495 MiB
mmcblk0: p1
Restarting tasks ... done.
# eth0: link up (100/Full)
#
я даже не заметил как он очнулся - очень быстро. Сколько потребляет в этом режиме затрудняюсь сказать - у меня с usb запитано, не померять.