Технические вопросы и ответы QA1517

ExpressCard предотвращает системный сон

Q: Когда наша карта ExpressCard вставляется, наш Mac не засыпает. Это сразу продолжает попытку, но следы. Что вызывает этот признак и как мы можем фиксировать его?

A: Когда наша карта ExpressCard вставляется, наш Mac не засыпает. Это сразу продолжает попытку, но следы. Что вызывает этот признак и как мы можем фиксировать его?

Слот ExpressCard нашел на Macintosh переносимые продукты, такие как функции MacBook Pro и интерфейс PCI Express и интерфейс USB. Согласно Стандарту ExpressCard, интерфейс USB должен соответствовать спецификации Универсальной последовательной шины (в настоящее время версия 2.0). Однако разработчики функций USB найдут, что USB указал, что питание VBUS (5 вольт) не присутствует в интерфейсе. Вместо этого ExpressCard +3.3 V и +3.3 сигнала VAUX доступны.

Интерфейс ExpressCard выключает +3.3вольтовый сигнал при сне в соответствии со спецификацией ExpressCard, но +3.3 сигнала VAUX остаются приводимыми в действие. Важно понять, что, когда компьютер Macintosh спит, USB-устройства приостановлены и способны к пробуждению машины, если они разъединяются.

Традиционное USB-устройство указывает, что соединяется путем получения по запросу или D + или строки D-к шине питания VBUS. Устройство ExpressCard должно сделать так путем получения по запросу или USBD + или строки USBD-к +3.3 направляющим VAUX. Если это вместо этого вытянет строку к +3.3вольтовой направляющей, когда компьютер заснет, то USBD + или строка USBD-будет плавать. Компьютер интерпретирует это как разъединение устройства и сразу проснется.

Таким образом функции USB должны получить свое питание от +3.3 источников VAUX (и, если необходимо также от +3.3вольтового сигнала при работе) так, чтобы они не разъединялись, когда приостановлено.

Организация PCMCIA (ответственный за документ Стандарта ExpressCard) работает над обеспечением дополнительного разъяснения в их спецификации, но много карт были сделаны, которые не используют +3.3 питания VAUX для их функции USB. Поставщики этих карт должны полагать, что перепроектирование их карт использует +3.3 питания VAUX во избежание проблемы сна, описанной ранее.

Для карт, уже поставленных, обходное решение существует в системах, или сделавших, чтобы ExpressCard Обновил 1,0 установленных, или выполняющих Mac OS X 10.4.8 или позже.

Если функция USB устройства является Составным устройством класса, обходное решение может быть реализовано с помощью codeless расширения ядра (KEXT). KEXT просто добавляет булево свойство ExpressCardCantWake со значением true к Ключу реестра I/O устройства. Если свойство установлено, драйвер класса Составного объекта USB проверяет на это свойство и сообщает семье USB. В свою очередь, драйвер хост-контроллера USB (AppleUSBUHCIDriver для низкого - или устройства полной скорости или AppleUSBEHCIDriver для устройств привет-скорости), отключает пробуждение - активируют опцию порта ExpressCard, если устройство подключается там.

Пример такого codeless KEXT доступен от Downloadables. Инструкции о том, как использовать его, находятся в проекте Info.plist файл.

Если функция USB устройства не является составным устройством класса, можно добавить код к драйверу устройства для включения вышеупомянутого обходного решения, или можно разделить на подклассы IOUSBCompositeDriver и гарантируйте это IOUSBCompositeDriver::ConfigureDevice вызывается. Если Вы принимаете решение изменить свой собственный драйвер, введите код в Перечислении 1 в Ваше водительское start метод.

  Код перечисления 1, чтобы сказать семье USB, что устройство ExpressCard разъединится на сне.

 // See if this is an ExpressCard device which would disconnect on sleep (thus waking every time)
    //
    expressCardCantWakeRef = OSDynamicCast(OSBoolean, fDevice->getProperty(kUSBExpressCardCantWake));

    if (expressCardCantWakeRef && expressCardCantWakeRef->isTrue()) {
        fDevice->GetBus()->retain();
        fDevice->GetBus()->message(kIOUSBMessageExpressCardCantWake, this, fDevice);
        fDevice->GetBus()->release();
    }

kIOUSBMessageExpressCardCantWake передайте только потребности, которые будут выпущены один раз для устройства и не один раз для каждого интерфейса.

Константы kUSBExpressCardCantWake и kIOUSBMessageExpressCardCantWake определяются в версии IOKit/usb/USB.h включенный в Xcode 2.4 и позже.

Downloadables



История версии документа


ДатаПримечания
28.02.2007

Новый документ, описывающий, как некоторые карты ExpressCard могут предотвратить системный сон и как решить проблему.