Arduino Micro потребляет слишком много энергии от iPhone. Как это изменить?

Я создаю USB-клавиатуру с двумя кнопками — пробел и ввод. Планируется использовать эту USB-клавиатуру (с разъемом Apple Lightning для USB) со встроенным переключателем iOS. Я купил адаптер Lightning to USB, подключил его к обычной клавиатуре, и все работает нормально.

Затем я взял Arduino Micro (ATMEGA32u4) и запрограммировал его в качестве клавиатуры с двумя нужными мне клавишами (пробел и ввод). На ПК он работает нормально, но когда я подключаю его к iPhone, я получаю сообщение:

Arduino Micro: The connected device requires too much power.

Я провел немало исследований по этому вопросу и нашел этот пост. Короче говоря, в этом сообщении говорилось, что когда вы подключаете устройство к устройству iOS, одно из первых действий, которое оно делает, — это сообщает iDevice, какой ток он потенциально может потреблять. Это число (около 200 мА для Arduino Micro) определяет, будет ли iDevice поддерживать это устройство или нет, хотя на самом деле устройство не приблизится к максимальному потреблению тока, по крайней мере, в моем случае.

Я подключил измеритель к обычной клавиатуре, и он потребляет чуть больше 4 мА. Когда я подключаю Arduino, он потребляет почти 40 мА. Хотя Arduino потребляет гораздо больше, чем клавиатура, все должно быть в порядке, потому что, когда я подключил флэш-накопитель, он потреблял ток 50 мА, но iPhone не жаловался.

Вот моя история, вот мой вопрос:

Можно ли как-нибудь изменить это, чтобы Arduino Micro не требовала так много энергии? Другими словами, есть ли способ сбросить значение, из-за которого iPhone не использует устройство?


, 👍1

Обсуждение

не используйте для этого ардуино.....разобрать обычную USB-клавиатуру.....выбросить переключатели и установить пару кнопочек вместо двух клавиш, @jsotola

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


2 ответа


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

3

Потребляемая мощность является частью обмена с ПК, когда он подключен к сети. Вы можете это изменить. Найдите файл USBCore.h в каталоге установки Arduino. В моем случае (под Linux) это было:

./hardware/arduino/avr/cores/arduino/USBCore.h

Внутри этого файла, примерно в строке 269 (в зависимости от дистрибутива), вы должны увидеть следующие строки:

#define D_CONFIG(_totalLength,_interfaces) \
    { 9, 2, _totalLength,_interfaces, 1, 0, USB_CONFIG_BUS_POWERED | USB_CONFIG_REMOTE_WAKEUP, USB_CONFIG_POWER_MA(500) }

Справа во второй строке указана запрашиваемая потребляемая мощность в миллиамперах (на данный момент 500). Измените это на (скажем) 100:

То есть измените USB_CONFIG_POWER_MA(500) на USB_CONFIG_POWER_MA(100).

Сохраните и перекомпилируйте.

Вы можете обнаружить, что загрузчик изначально запрашивает ток 500 мА даже с этим изменением (поскольку он изначально запускает загрузчик). Однако при запуске скетча он должен восстановить соединение USB и запросить только 100 мА. Чтобы это исправить, вам придется перекомпилировать загрузчик с тем же исправлением и переустановить его, что является несколько более сложной задачей.

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

,

Маженко опередил меня, пока я проверял свой ответ. :), @Nick Gammon

У меня простая клавиатура Arduino, и она отлично работает на всех других устройствах, кроме iPhone. Ребята, вы заставили это работать на iPhone?, @Erik Andershed

@ErikAndershed Для меня это звучит как новый вопрос. Не стесняйтесь сделать один., @Nick Gammon


1

Да, но это требует ручной модификации основного программного обеспечения Arduino.

  1. Найдите файл USBCore.h в установленной плате AVR (он может находиться в папке хранения данных, где бы она ни находилась в вашей ОС, или в самом программном обеспечении IDE)
  2. Найдите строку #define D_CONFIG(_totalLength,_interfaces) \
  3. В следующей строке указаны настройки мощности. Измените USB_CONFIG_POWER_MA(500) на то, что вам нужно (например, USB_CONFIG_POWER_MA(50)
  4. )
,

Я тестировал на 50. Но не работает. Когда я подключаю его к своему iPhone с помощью адаптера (от USB-C к освещению, он поддерживает как питание, так и передачу данных). Мой чип Arduino не просыпается. Вы заставили это работать?, @Erik Andershed