faqs.org.ru

 Главная > Электроника и компоненты >

EMBEDDED FAQ: Периферия

Секция 1 из 2 - Предыдущая - Следующая

Ответы на вопросы о периферии

Вопросы по I2C

Q: Где можно посмотреть спецификацию шины I2C ?
Q: Как правильно организовать формирование уровней сигналов на шине ?
Q: Какой из портов микропроцессора можно использовать для организации I2C шины ?
Q: Как правильно организовать обмен данными ?
Q: В описании стандарта I2C сказано, что максимальная частота шины в режиме Standard Mode равна 100 кГц. С какой минимальной частотой может работать шина ?
Q: Можно ли использовать в качестве pull-up резистора pull-up встроенный в микроконтроллер ?
Q: Какой резистор выбрать в качестве pull-up ?
Q: Как определить емкость шины ?

Вопросы по RTC

Q: Какие бывают широко распространенные RTC ?
Q: Поставил в свою схему RTC DS1302 с обычным советским кварцем 32K. Часы убежали за ночь на 9 сек. По сему вопрос. Это проблема из-за кварца или чипа? И вообще, какова средняя точность у чиповых RTC? Каков разброс у часовых кварцевых резонаторов?
Q: В одном из Dallas'овских Appnotes'ов было написано, что резонатор должен иметь встроенную емкость 6 пФ; была нарисована схема, где эта емкость была параллельна резонатору. Я померил свой резонатор и нашел что его емкость = 0. Может ли это влиять? И какую емкость на землю?
Q: А как скорректировать ход часов ?

Вопросы по PCI

Q: Где взять описание PCI 2.1 ?
Q: Как перевести имеющуюся разработку с ISA на PCI?
Q: Как сделать новое устройство на PCI ?

 

Вопросы по LCD индикаторам

Q: Почему индикатор 1x16 на самом деле 2x8 ?

 

Вопросы по программированию обмена с портами

Q: Как написать драйвер под Win95/98, он же VxD ?

 

Вопросы по EPP порту

Q: Что такое EPP ?
Q: Как включить режим EPP на компьютере ?
Q: В чем отличие EPP1.7, EPP1.9, IEEE1284 ?
Q: Можно ли сделать EPP-периферию на микроконтроллере ?
Q: Что адресуют адресные циклы ?
Q: Когда EPP-устройство генерирует прерывание ?
Q: А если EPP-устройство все же не успевает квитировать ?
Q: Важен ли бит направления порта LPT ?
Q: Нужно ли применять специальный кабель ?
Q: Какие еще проблемы могут возникнуть ?
Q: Какая скорость может быть достигнута на EPP ?

 

Вопросы по RS232

Q: Что такое RS232 и на какое расстояние он работает ?
Q: Что такое Flow Control и как он работает ?
Q: А как соединить 2 устройства по RS232 ?

 

Вопросы по IrDA

Q: Что такое IrDA с точки зрения Win95/98 ?

 


Вопросы по I2C

>Q: Где можно посмотреть спецификацию шины I2C ?

A:Сергей Борщ
Полное описание последней (2.1) версии стандарта лежит по адресу: http://www.semiconductors.com/acrobat/various/I2C_BUS_SPECIFICATION_3.pdf

>Q: Как правильно организовать формирование уровней сигналов на шине ?

A:Сергей Борщ
Согласно стандарту выходы устройств объединяются в шину I2C по схеме 'монтажное И'. Уровень логической единицы на шине формируется pull-up резистором, уровень лог. нуля - 'притягиванием' к нулю открытым выходным транзистором устройства-передатчика. Формирование единицы выходным током устройства-передатчика не допускается!

>Q: Какой из портов микропроцессора можно использовать для организации I2C шины ?

A:Сергей Борщ
В принципе любой. Единственное требование: вывод должен иметь возможность работать как на передачу, так и на прием. Наиболее целесообразно использовать выводы, имеющие открытый сток, т.е. выводы, не имеющие встроенного 'верхнего' p-канального транзистора. Благодаря этому отпадает необходимость при формировании уровня лог. единицы переключать эту ногу на ввод.

>Q: Как правильно организовать обмен данными ?

A:Сергей Борщ
Инициатором обмена всегда является устройство-мастер. Только оно может формировать сигналы SCL. Оно формирует на шине состояние 'Старт' после которого посылает 8 бит адреса устройства, с которым устанавливается сеанс обмена и переводит линию данных в положение 'лог.1'. Если на шине присутствует устройство с запрашиваемым адресом и это устройство способно принимать данные (например, у памяти в данный момент не происходит цикл записи), это устройство после среза 8-го импульса линии SCL переводит свой буфер линии SDA в положение 'передача лог.0'. Линия данных оказывается 'притянутой' к 0 на время девятого импульса SCL. Это состояние называется 'Acknowledge' и свидетельствует о готовности slave-устройства принимать данные. Обращаю внимание на то, что состояние линии SDA меняется во время низкого уровня на линии SCL т.е. по срезу SCL. Смена состояния SDA во время высокого уровня SCL допускается только мастером и означает формирование условия 'старт' или 'стоп'. Направление обмена во время сеанса определяется младшим битом адресного байта(R/W). Если бит был равен нулю, следующие байты (до условия 'старт' или 'стоп') будут передаваться от мастера к slave. Если бит был равен 1, то передатчиком будет slave, а мастер - приемником. В ответ на каждый принятый байт устройство-приемник (не обязательно мастер!) формирует состояние 'Acknowledge' (0) или 'Not Acknowledge'(1) во время 9-го такта SCL. Сеанс заканчивается формированием мастером условия 'стоп' или 'повторный старт (Repeated Start)' после принятия/передачи 9-го бита ('Acknowledge' или 'Not Acknowledge'). Условие 'повторный старт' является одновременно началом нового сеанса.

>Q: В описании стандарта I2C сказано, что максимальная частота шины в режиме Standard Mode равна 100 кГц. С какой минимальной частотой может работать шина ?

A:Сергей Борщ
Стандарт не оговаривает минимальную частоту шины. Она определяется как наибольшая из минимально допустимых для всех устройств, подключенных к шине. Обычно в спецификациях на микросхему указывается как максимальная так и минимальная частота и для большинства микросхем (таких как память 24LCxx, часы MK41Txx) минимальная частота равна нулю, т.е. шина, к которой подключены такие микросхемы, может работать в статическом режиме. Однако бывают и такие микросхемы (из известных мне - контроллеры аккумуляторных батарей BQ20хх) для которых в документации четко оговорена минимальная частота шины. При частоте шины, меньшей оговоренной в документации микросхема просто не реагирует на обращенные к ней запросы. Существует еще одна особенность о которой часто забывают: Если slave-устройству требуется некоторое время на обработку запроса masterа, оно вправе приостановить шину, удерживая линию SCL в состоянии 'лог.0' после 9-го импульса SCL (чтения мастером состояния 'Acknowledge'). Устройство-мастер обязано дождаться отпускания этой линии, после чего может продолжить обмен. Поэтому в реализации мастера настоятельно рекомендую после 'отпускания' линии SCL считать состояние этой линии и проверить, действительно ли эта линия перешла в состояние 'лог.1'.

>Q: Можно ли использовать в качестве pull-up резистора pull-up встроенный в микроконтроллер ?

A:Сергей Борщ
В принципе, если этот резистор при данной длине и емкости шины обеспечивает необходимый ток, противопоказаний нет. Главный критерий - обеспечение этим резистором при данной емкости шины длительности фронтов импульсов не более 1мкс для Standard Mode и 300нс для Fast Mode.

>Q: Какой резистор выбрать в качестве pull-up ?

A:Владимир Курлов
Выбирать резистор надо исходя все из того же условия крутизны фронтов. Не рекомендуется ставить резисторы сопротивлением менее 1.5кОм. Обычно в пределах одной платы достаточно резистора 5.1...10кОм.

>Q: Как определить емкость шины ?

A:Владимир Курлов
Определить емкость шины довольно просто экспериментальным методом. Для этого необходим осциллограф с калибратором и резистор сопротивлением порядка 10кОм. На схему подается питание. Сигнал с калибратора (5В, 1кГц) подается через резистор на шину. Осциллографом определяется амплитуда меандра на шине. По ней рассчитывается сопротивление шины на частоте калибратора. Зная частоту калибратора легко высчитать емкость (R=2pi*f*C).

 


Вопросы по RTC

>Q: Какие бывают широко распространенные RTC ?

A:
PCF8583 + кваpц, подключается по I2C. - часы + 2 таймеpа Это часы-календаpь с памятью 256 байт. Интеpфейс I2C.
DS1287 с встроенной батарейкой и параллельной шиной доступа.
DS1302 Dallas с обычным советским кварцем 32K. (~$2.2...2.5).
DS1307 от Dallas Semiconductors. Восьминожка. Стоит чуть доpоже $2. Есть небольшой RAM и автопереключение на литиевую батарэйку (500nA). Вpемя, дата (с днем недели). Общение с внешним миpом чеpез I2C.
DS1315 (RTC+NVRAM), но ее как-то трудно найти.
DS1994 Последовательная шина в одном корпусе с батарейкой и кварцем. Hо дороговато.
ICM7170 с параллельным портом.
MK41T56 от томснона с I2C. (3.5$) Документация лежит на http://www.st.com/stonline/books/pdf/docs/2415.pdf
512ВИ1 советская.
A:Андрей Наркевич
В области кассостpоения часто пpименяются:
DS1305 - SPI, стоит около 3.5$.
M48T08 и M48T35 - энеpгонезависимое ОЗУ емкостью соответственно 8кБ и 32кБ + часы-календаpь. Интеpфейс - как y стандаpтной микpосхемы ОЗУ, кpоме того, что M48T08 имеет выход сyпеpвизоpа питания. Пpоизводитель SGS Tomson. Имеют встpоеннyю литиевyю батаpею с запасом хода 10 лет. Стоимость - 12 и 16$ соответственно. DIP28 высотой около 15мм, есть ваpиант SOIC.

>Q: Поставил в свою схему RTC DS1302 с обычным советским кварцем 32K. Часы убежали за ночь на 9 сек. По сему вопрос. Это проблема из-за кварца или чипа? И вообще, какова средняя точность у чиповых RTC? Каков разброс у часовых кварцевых резонаторов ?

A:Андрей Столярук
Поможет App.Note 58 - http://www.dalsemi.com/datasheets/pdfs/app58.pdf. Суть в том что у кристалла есть такой параметр как емкость нагрузки CL(load capacitance). Если она больше чем емкость генераторной цепи чипа, то частота будет выше чем положено, и наоборот. Там же есть описание методов борьбы с этим явлением.
А в этом конкретном случае надо просто конденсатор поставить параллельно кварцу.

A:Николай Штремель
У них не разброс, а высокий процент брака. Проявляется, обычно, в виде плохой термостабильности.

A:Владислав Балясов
По типовой схеме включения (без конденсатоpов на "землю") у меня он (1307, но один чеpт) бежал тоже весьма и весьма. Поскольку точности не тpебовалось, с конденсатоpами я игpаться не стал...
Это лучше смотpеть для конкpетного изготовителя. Вот у Fox Electronics - +/-20ppm, 0.04ppm/C.

>Q: В одном из Dallas'овских Appnotes'ов было написано, что резонатор должен иметь встроенную емкость 6 пФ; была нарисована схема, где эта емкость была параллельна резонатору. Я померил свой резонатор и нашел что его емкость = 0. Может ли это влиять? И какую емкость на землю ?

A:Владислав Балясов
Cl - это емкость нагpузки. У 1302 нагpузка ноpмиpованная (6 pF). Если кpисталл pасчитан под 12 pF, в 6 pF-схеме будет вpать. Dallas pекомендует выбpать кваpц с под емкость 6pF, тогда, якобы, можно обойтись без дополнительных элементов.

Емкость резонатора 0 не может быть пpосто потому, что не может быть никогда :) Хотя она и в самом деле невелика - вот пеpвый попавшийся, ~0.8 pF между выводами, ~0.4 pF от каждого вывода на коpпус. Hо, в общем-то, она ничего с точки зpения пользователя не опpеделяет...

Раз рекомендуется емкость паpаллельно кваpцу - значит, так и надо сделать. Можно начать с 6 pF паpаллельно, и пpи необходимости - уменьшать или увеличивать. Hо можно попpобовать и тpиммеp 8..30 с входа на "землю".

>Q: А как скорректировать ход часов ?

A:Илья Туманов
Если часы внешние, а пpоцессоp отключается, то нужно записывать в ОЗУ часов вpемя последней коppекции. Пpи включении смотpим сколько вpемени часы ходили без коppекции и опpеделяем уход. Hапpимеp, если часы спешат на 30 секунд в сутки, а последняя коppекция была 100 часов назад, то уход 100/24*30 = 125 секунд. Вычитаем их из текущего вpемени, обновляем вpемя последней коppекции. Пока пpоцессоp pаботает, коppектиpуем вpемя каждый час или каждый день - по вкусу.

 


Вопросы по PCI

>Q: Где взять описание PCI 2.1 ?

A:
Например, на ftp://elin.admik.com/pci21.pdf или http://akulin.npi.msu.su/docs/standard/pci21.pdf

Описание PCI 2.2 можно найти на ftp://ftp.calweb.com/users/m/memec/PCI22.PDF

>Q: Как перевести имеющуюся разработку с ISA на PCI?

A:Алексей Владимиров
Можно взять PCI9050 RDK за $299 на http://www.plxtech.com. В состав этого комплекта входит плата с ISA разъемом с одной стороны и PCI разъемом с другой на чипе PLX9050 и весь необходимый софт, схемы и документация. После чего нужно проверить, что все работает, развести PCI плату с добавлением на нее одной микросхемы моста PLX9050 моста и получается вполне работоспособное изделие на PCI и не слишком дорого.

>Q: Как сделать новое устройство на PCI ?

A:Тимур Пранкиш
Для этого есть несколько ваpиантов:

A:Гоша Зафиевский
Еще pаз к вопpосу о мегафункциях : все, что я видел, тpебовали по минимуму 10K30 (в случае Альтеpы, Xilinx - не помню, вpоде кого-то из 4k), пpи этом места оставалось совсем чуть-чуть. Так что на любителя :)

A:Александр Самольянов
Журнал 'Компоненты и технологии', No 2'2000: target и часть мастера (DMA запись в память) запихали в EPM7256A. Правда, основная часть мастера была реализована в FLEX10КЕхх, которая грузилась через target на EPM.

 


Вопросы по LCD индикаторам

>Q: Почему индикатор 1x16 на самом деле 2x8 ?

A:Александр Голов
LCD индикатор 1x16 на чипе 44780 ведёт себя так, как будто это двустрочный индикатор. При этом первые 8 символов - это первая строка, следующие - вторая (то есть строка в памяти не линейна).

Причина этому экономическая. У самого HD44780 есть 40 сегментных линий и 16 подложечных, т.е. 2 строки по 8 символов. Соответственно, все индикаторы до 16 символов, включительно, могут быть сделаны на одной ИС, для любого удлинения строк свыше 8-ми символов понадобится дополнительная ИС драйвера.

Программная обработка вывода при этом становится весьма неудобной. Однако в удобном варианте пришлось бы платить за ещё одну ИС. Если же запрограммить его на однострочный режим - он показывает только первые 8 символов, так как просто отключается развёртка по 8-ми подложкам второй строки.

 


Вопросы по программированию обмена с портами

>Q: Как написать драйвер под Win95/98, он же VxD ?

A:Леонид Слободчиков
Во-первых, если устройство подключено к COM-порту, то драйвер, скорее всего, не нужен. Функции CreateFile,ReadFile/WriteFile, EscapeCommFunction и пр. достаточно хорошо изложены в MSDN, там же есть статья Serial Communication in Win32, где этот вопрос детально описан.

Что касается LPT, то здесь все гораздо хуже. Формально LPT относится к тому же классу устройств что и COM, то есть Ports, и для обращения к нему можно использовать те же функции. Но при этом ваше устройство должно быть IEEE1284-compliant или -compatible. Более глубокое рассмотрение вопроса показало, что из режимов ieee1284 в lpt.vxd под Win95OSR/98 реализованы только Centronics,Nibble и ECP. Ни о каком "дернуть ногой LPT" здесь речи и не идет, данный сервис в Win отсутствует по определению. Хотя есть третьесторонние библиотеки, которые это позволяют.

Теперь, собственно про драйвера: Что бы начать писать драйвер надо:

DDK можно скачать с http://www.microsoft.com/ddk/ Вполне рабочий огрызок пакета VToolsD от NuMega, позволяющий писать драйвера полностью на C, что на первых порах очень упрощает дело, можно найти на ftp://ftp.kti-git.nsc.ru/pub/win/VXD/vtoolsd.zip

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

Сами драйвера бывают нескольких видов, в зависимости от класса устройства. Принципы фунцкционирования и написания их очень отличаются и здесь мне их все не описать.

Сам же по себе драйвер безотносительно к классу устройства состоит из заголовка, где описано его имя, порядок инициализации и пр. и таблицы сервисов, которые он будет предоставлять. Для самого простого драйвера важны сервисы OnSysDynamicInit, OnSysDynamicExit и OnW32_DeviceIOControl.

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

Далее для обращения из приложения к драйверу используется функция DeviceIoControl, в которой драйверу передаются все необходимые параметры. При вызове данной функции вызывается сервис OnW32_DeviceIoControl и здесь вы может написать все что вам нужно, например, in al,dx, и данная инструкция будет выполнена без каких-либо ограничений со стороны Windows. По завершению сервиса все возвращаемые параметры сохраняются в той же структуре, где были присланы входящие.

Работа с драйвером завершается вызовом из приложения CloseFile, при этом в драйвере вызываются все сервисы отвечающие за заверешение (On*Exit) и драйвер выгружается из памяти, если нет других приложений его использующих.

Примеры такого драйвера можно найти в соответствующих DDK. Например, в ddk95 это /ddk/base/samples/cvxd32/ или /ddk/base/samles/asyncw32. Последний демонстрирует асинхронный обмен с драйвером, т.е., например, если ваше устройство не готово для обмена, драйвер возвращает управление приложению и оно рисует летающие документики :), периодически вызывая GetOverlappedResult, чтобы определить завершение обмена.

Еще на http://www.lvr.com в разделе про параллельный порт есть куча ссылок на подобные вещи под Win9x/NT, позволяющие доступ к любому порту хоть из Visual Basic'а.

Еще на http://www.entechtaiwan.com/tools.htm есть библиотека под Win9x/NT/2000, которая позволяет достукиваться к любым портам, dma-каналам, памяти. Возвращает кол-во LPT-портов, их базовые адреса, позволяет залочить порт (чего обычно всякие inport/outport не делают), читать/выставлять значения каждого пина в отдельности. Также читает серийный номер IDE. Архитектура библиотеки такая - dll-ка обеспечивающая API и драйвер, который она вызывает для реализации запрошеных функций.

A:Вячеслав Овсиенко
Изначально (начиная от Win386) драйвера писались на asm, посему подавляющее большинство системных сервисов получает и возвращает параметры в регистрах и флагах процессора. Сервисы более поздних компонентов (Configuration Manager, например) уже имеют вызовы типа C, и вообще MS старается теперь поощрять написание драйверов на C/C++. Для вызова более старых (условно) сервисов из C/C++ пишуться переходники (wrappers) библиотеки которых есть как в DDK, так и в VToolsD (гораздо более полное собрание), но и там и там в переходниках встречаются ошибки :-(

Огромный минус обоих пакетов - огрызочная документация. Описаны отдельные функции и параметры, по каждому компоненту обычно написан параграф из 10 строчек и это все. Даже имея примеры, очень сложно, не зная глобальной концепции, что-то разрабатывать. По написанию Vxd для Win95 в мире вышло всего две приличные книжки:
http://www.amazon.com/exec/obidos/ASIN/1556159498/ Systems Programming for Windows 95, автор Walter Oney. Сайт поддержки, дополнений и полезных утилит - http://www.oneysoft.com/
http://www.amazon.com/exec/obidos/ASIN/0879304383/ Writing Windows VxDs & Device Drivers; Programming Secrets for Virtual Device Drivers, автор Karen Hazzah.

Hа русском языке есть: Даниель Hортон, Hаписание драйверов для Windows, но очень непрофессиональный перевод, понять по первому разу невозможно ничего. Лучше просто не читать, потому как вносит приличную путаницу.

Сейчас мир драйверов для OS от MS мигрирует на так называемую WDM - Windows Driver Model - по сути это KMD (Kernel Mode Driver) для NT. Такой драйвер пишется изначально на C/C++ и без особых извращений, кроме того в NTDDK есть нормальная документация и можно обойтись без дополнительной литературы.

И наконец, есть англоязычная конференция: comp.os.ms-windows.programmer.vxd Там частенько Walter Oney отвечает на интересные вопросы.

 

Секция 1 из 2 - Предыдущая - Следующая

Вернуться в раздел "Электроника и компоненты" - Обсудить эту статью на Форуме
Главная - Поиск по сайту - О проекте - Форум - Обратная связь

© faqs.org.ru