Драйвер для неизвестного устройства Intel ICH LPC Interface Controller
Сегодня в очередной раз столкнулся с необходимостью установки драйвера для неизвестного устройства Intel(R) 82801GB/GR (ICH7 Family) LPC Interface Controller — 27B8. В зависимости от модели чипсета название этого устройства может быть другим, но суть от этого не меняется. Это достаточно старая и известная проблема, которая до сих пор у многих вызывает затруднения.
Если в Диспетчере устройств открыть закладку «Сведения» для этого неизвестного устройства, то в разделе «ИД оборудования» можно увидеть строку ACPI\ATK0110. ATK 0110 — это виртуальное устройство которое собирает информацию о работе материнской платы для утилиты Asus AiBooster. Для Windows 2000 и выше нужно установить драйвер ATK0110 ACPI UTILITY.
Будьте внимательны! В архиве находятся две версии драйвера: для 32-битных и 64-битных операционных систем. Обязательно следует устанавливать версию, которая соответствует разрядности вашей операционной системы.
Вы так же можете использовать Windows Update, который автоматически подберет, скачает и установит необходимый драйвер.
Linux lpc interface controller
LPC (Low Pin Count, малое число контактов) — шина, разработанная компанией Intel и предназначенная главным образом для подключения стандартных устройств, доставшихся современным персональным компьютерам «в наследство» от ранних ПК и обычно называемых унаследованными (legacy). Раньше такие устройства подключались к шине ISA.
Целесообразность разработки новой шины объясняется следующими основными причинами:
- унаследованные устройства используют заранее определённые диапазоны адресов памяти и ввода-вывода и не обладают возможностью конфигурирования, предусмотренной технологией Plug and Play, поэтому они не могут быть напрямую подключены к более современным шинам (PCI, AGP, PCI Express), имеющимся в современных ПК;
- традиционно использовавшаяся для подключения таких устройств шина ISA имеет много сигналов (88, не считая линий питания), что усложняет и удорожает как контроллеры, так и системные платы, поэтому сохранение её в прежнем виде нецелесообразно;
- необходимость сохранять электронную совместимость с шиной ISA в обычных ПК отсутствует, поскольку предназначенные для неё устройства расширения (например, сетевые и звуковые платы) к рубежу веков практически «вымерли».
Шина LPC имеет всего 7 обязательных и 6 необязательных сигналов. Обмен данными по ней идёт в синхронном режиме с частотой 33 МГц (шина ISA является асинхронной, что также усложняет работающее с ней оборудование), причём каждый так передаётся 4 информационных или управляющих бита. Разрядность адреса увеличена до 32 бит, что позволяет задатчикам шины прямо обращаться к адресному пространству памяти объёмом 4 Гбайта (у шины ISA разрядность адреса составляла 24 бита, что ограничивало возможности адресации величиной 16 Мбайт). Реальная пропускная способность LPC, составляющая 6,7 Мбайт/с, ненамного уступает таковой у ISA (до 8 Мбайт/с) и совершенно достаточна для одновременной работы всех подключенных к ней устройств (по расчётам Intel, они используют порядка 75% максимальной пропускной способности).
В современных ПК шина LPC через мост подключается к шине PCI или PCI Express (технически мост PCI-LPC обычно входит в состав микросхемы «южного моста»). К LPC обычно присоединяется микросхема многофункционального контроллера, в англоязычной документации именуемого «Super I/O». В его состав могут входить, например, последовательные, параллельный и инфракрасный порты, контроллер интерфейса PS/2, контроллер гибких дисков, а также набор линий общего назначения (General Purpose I/O, GPIO), к которым часто подключаются датчики температуры и вентиляторы. Кроме того, к LPC могут подсоединяться другие как современные (например, модуль TPC), так и устаревшие устройства (например, аудиокодек AC’97).
С точки зрения программиста шина LPC как бы отсутствует: программы просто работают с регистрами подключенных к ней устройств. Хотя у LPC отсутствуют традиционные сигналы запросов прерываний и прямого доступа к памяти, эти возможности поддерживаются, причём создаётся иллюзия применения обычной шины ISA. Например, с точки зрения программиста подключенные к LPC порты и контроллер интерфейса PS/2 генерируют обычные для них запросы прерываний IRQ1, IRQ3, IRQ4, IRQ12, хотя физически эти линии отсутствуют. Определять наличие или отсутствие тех или иных устройств, подключенных к LPC, необходимо соответствующими функциями BIOS. Зачастую информация о них содержится в таблицах ACPI, поэтому анализ конфигурации обычно целесообразно начинать именно с их разбора.
Месяц HAL продолжается: HAL для LPC
В продолжение месяца постов о HAL решил написать и о своей библиотеке, правда, в отличие от предыдущих она в основном специализируется на контроллерах от NXP. Библиотека не использует дополнительных прослоек и работает напрямую с регистрами. Она состоит из двух обязательных частей, которые собираются с помощью GCC ARM, make и kconfig, и затем статически линкуются с основным проектом.
mbed LPC1768 + IAR + CMSIS-DAP (шаблон проекта)
Всем привет!
Думаю что тем, кто среди вас является поклонниками IAR и у кого внезапно завалялся mbed LPC1768 (он же mbed обыкновенный), может пригодиться шаблон, который я состряпал и оформил на днях.
Почему рабочий и такой весь распрекрасный mbed может внезапно заваляться? Ну хотя-бы потому, что он, сикут эт ардуинус вульгарис, не поддерживает нормальную отладку из коробки со своим онлайн-компилятором. Именно поэтому он завалялся и у меня, после того, как я с ним наигрался. Что уж поделать — жирую я, привык к нормальной отладке 🙂
Так вот, относительно недавно у mbed было феерическое обновление прошивки интерфейса, в которую добавили поддержку CMSIS-DAP. Кто следит за событиями и в теме — тот знает. Кто не следит и не в теме — это такой специальный стандарт, разработанный ARM, который описывает универсальный отладчик.
Таким образом, mbed получил возможность полноценно отлаживаться по евойному USB проводочку, что есть очень хорошо. Но бида заключалась в том, что на тот момент, когда я обновил свой mbed и решил испробовать этот функционал, единственной средой, которая поддерживала CMSIS-DAP была среда Keil MDK (кто бы сомневался!). Я далеко не фанат этой среды, но чисто для интереса, поставил ее и решил попробовать. Действительно, отладка работала и делала это очень хорошо. Тем не менее, MDK я удолил, а все попытки узнать что-то про поддержку CMSIS-DAP у IAR приводили ко вполне обоснованным предположениям, что IAR тесно повязан с Segger и такую поддержку реализует не скоро. Если вообще реализует. По крайней мере интернеты были именно такого мнения и настроя.
Но на днях, обновив IAR на относительно последний, я узрел, что чудо свершилось! Поддержка CMSIS-DAP появилась и в IAR. Естественно, я сразу же начал запиливать блинки, который можно было бы отлаживать на mbed в IAR’е. Очень помогло то, что все библиотеки mbed с некоторого времени лежат с открытыми исходниками — это замечательно. Тем не менее, после создания и первичной настройки/нафаршировки проекта, простой блинки не то чтобы отлаживаться, он и компилироваться-то не особо хотел. Вот тут-то и начались грабли.
Проблемы компиляции были решены небольшим допилом mbed’овской либы. Также, либа была немного реструктурирована для упрощения. Был убран либовский CMSIS, ибо в IAR есть возможность подключить встроенный. После этих шаманств дело пошло, блинки загружался и работал нормально. Но вот отлаживаться упорно не хотел.
В результате долгих мудовых рыданий была обнаружена совершенно неочевидная вещь, связанная со скриптом линкера, о которой, походу, никто не в курсе. По всей видимости, это такая специфическая особенность работы связки mbed, IAR и CMSIS-DAP. Дело в том, что если оставить скрипты линкера как у всех, в частности, начало региона ROM в 0x00000000, то программа успешно компилируется, запускается и работает, но вот отлаживаться (именно в IAR’e) не желает — отладка жутко глючит и проц периодически ресетится и валится. Я так и не понял с чем это связно, но мне кажется, что это всяко связано с механизмом защиты кода NXP. Поэтому, ставим начало региона ROM в 0x00000300 (за областью защиты) и радуемся — отладка начинает работать как часы. Вот так.
Было еще несколько разных мелких нюансов, которые я причесал в шаблоне, и которые уже не упомню. Но тем не менее, можете качать на здоровье и пользоваться. Вполне себе мило и работает.
Да. Вот еще что. У IAR’a то-ли такая специфическая реализация CMSIS-DAP, то-ли просто баг на первой версии библиотеки поддержки этого типа отладчиков, то-ли просто какая-то несовместимость с mbed, но просто так, через механизмы отладки, загрузить прошивку в mbed не получается. Вообще никак. Загрузка только ручками на диск mbed, как обычно.
На самом деле это не сильно большая проблема, т.к. решается она просто — в свойствах проекта задается команда автоматического копирования исполняшки на диск mbed после сборки, а в свойствах отладки ставится галка, что загрузку производить не надо. Вот и все. Процедура работы при этом такая: собираем исполняшку (она автоматически грузится на диск mbed), жмем на mbed кнопу reset (исполняшка шьется в контроллер), жмем отладку в IAR, отлаживаем. В общем-то, не сильно много неудобств. Но я на всякий случай написал в суппорт mbed об этой шняге — посмотрим, что они ответят.
LPCXpresso Урок 15. I2C. Работа с термометром LM75.
Представляю вашему вниманию ранее отменённую статью курса для начинающих посвященную шине I2C на примере работы с датчиком температуры LM75. Сам датчик имеет небольшую стоимость (25р в Чип-НН на момент покупки мной, да и в наборе I2C от NXP присутствовал), что в 2-3 раза дешевле популярного термометра от Dallas. Про LM75 имеется описание в сообществе и вне его в инете (благо есть поиск).
LPCXpresso Урок 14. PWM. Синхронный ШИМ на таймере.
Прежде чем завершить курс для новичков рассмотрим такую всеми любимую и всем надоевшую тему как ШИМ.
Схема
Для данного урока нам надо подключить пару светодиодов к выводам P1.9 и P1.10 платы, через ток ограничительные резисторы (номиналом 100 Ом – 1 кОм):
Если вдруг под рукой у вас не завалялось ни одного светодиода, то можно поступить и так:
LPCXpresso Урок 13. Debug. Погружаемся в отладку на примере UART.
Я в курсе для новичков предлагаю вам уже избавленный от ошибок код, но что делать, когда пишешь код сам. Отладчик это мощное средство, давайте же изучим его ещё немного лучше. До сих пор мы только наблюдали в нем за ходом выполнения программы, в этом же уроке мы будем им управлять.
LPCXpresso Урок 12. UART. Взаимодействуем с компьютером.
Предлагаю вашему вниманию поверхностное знакомство с UART интерфейсом в контроллере. Данный урок является вступлением к наиболее важной части (следующий урок) курса для новичков.
LPCXpresso Урок 11. USB+SPI. Делаем картридер.
Курс для новичков продолжается ознакомлением с SPI на примере работы с SD/MMC карточками. А поскольку USB-MSC мы уже проходили, то соорудим пародию на картридер. Пользоваться им я категорически запрещаю, т.к. размер карты зашит в коде и при установки другой карты вы можете потерять ваши данные.
LPCXpresso Урок 10. USB-MSC. Разбираем пример.
Продолжим знакомство с LPC13xx в среде разработки CodeRed. На сей раз в рамках курса для новичков изучим пример использования встроенного класса USB mass storage (или попросту USB-флешки).
Используем отладку LPC-Link без CodeRed IDE
Всем привет,
Дошли наконец руки до валяющейся уже год экспрессы с 1768 на борту. Но поскольку CodeRed IDE мне категорически не нравится, появилось стойкое желание завести отладку под любой другой IDE. Что мне отчасти удалось. Опишу, что я сделал, может у кого-то появится идея, как быть дальше.
LPCXpresso Урок 9. USB-bootloader. Прошиваем контроллер подручными средствами.
Об использовании USB-загрузчика у NXP имеется аппноут AN10986 (код). Я же попробую в рамках курса для новичков рассказать его по-русски.
На данном этапе отладчик нам не нужен, поэтому отключаем его от USB.