Введение
Для кого эта книга
Структура книги
Краткое описание глав
Программные требования
О программном коде
Обозначения
Аппаратные требования
Благодарности
Обратная связь
Глава 1. Стандарты последовательной связи
1.1. Стандарты последовательной связи
1.1.1. Протокол RS-232
1.1.2. Протокол RS-422A
1.1.3. Протокол RS-423A
1.1.4. Протокол RS-485
1.1.5. Протокол RS-499
1.1.6. Протокол RS-562
1.1.7. Протокол V.24
1.1.8. Протокол V.28
1.1.9. Протокол V.35
1.1.10. Протокол X.21
1.1.11. Рекомендация X.21bis
1.1.12. Краткое сравнение RS-протоколов
1.2. Принципы последовательной связи
1.3. Разъемы коммуникационного порта
1.3.1. Сигнальная "земля" (AB/SG)
1.3.2. Защитная "земля" (AA)
1.3.3. Передаваемые данные (ВА/TxD/TD)
1.3.4. Принимаемые данные (ВВ/RxD/RD)
1.3.5. Запрос передачи (СА/RTS)
1.3.6. Готовность к передаче (CB/CTS)
1.3.7. Готовность DCE (СС/DSR)
1.3.8. Готовность DTE (CD/DTR)
1.3.9. Индикатор вызова (СЕ/RI)
1.3.10. Обнаружение несущей (CF/DCD)
1.3.11. Детектор качества сигнала (CG/SQ)
1.3.12. Переключатель скорости передачи данных от DTE (СН)
1.3.13. Переключатель скорости передачи данных от DCE (CI)
1.3.14. Готовность к приему (CJ)
1.3.15. Местный шлейф (LL)
1.3.16. Удаленный шлейф (RL)
1.3.17. Индикатор тестирования (ТМ)
1.3.18. Синхронизация передачи от DTE (DA)
1.3.19. Синхронизация передачи от DCE (DB/TC)
1.3.20. Синхронизация приема от DCE (DD/RC)
1.3.21. Передаваемые данные дополнительного канала (SBA/STD)
1.3.22. Принимаемые данные дополнительного канала (SBB/SRD)
1.3.23. Запрос передачи по дополнительному каналу (SCA/SRTS)
1.3.24. Готовность к передаче по дополнительному каналу (SCB/SCTS)
1.3.25. Обнаружение несущей дополнительного канала (SCF/SDCD)
1.4. Ресурсы IBM PC для последовательной связи
1.4.1. Сервисы BIOS
1.4.2. Коммуникационные порты
1.4.3. Использование прерываний
1.4.4. Прямое программирование портов в Windows
1.4.5. Функции Windows
Глава 2. Протоколы
2.1. Что такое протокол обмена
2.2. ASCII-протокол передачи данных
2.3. Бинарный протокол передачи данных
2.4. Предотвращение потери данных
2.4.1. Прерывания и потоки
2.4.2. Буферизация
Синхронизация в DOS
Синхронизация в Windows
2.4.3. Обратная связь
2.5. Методы обнаружения ошибок передачи
2.5.1. Контроль четности
2.5.2. Контрольная сумма
Простая контрольная сумма
Контрольная сумма LRC
Контрольная сумма CRC16
2.5.3. Стартовый байт
2.5.4. Другие способы повышения достоверности данных
Глава 3. Последовательные протоколы IBM PC
3.1. Мышь
3.1.1. Базовый протокол Microsoft Mouse
3.1.2. Протокол Microsoft Plus
3.1.3. Протокол 3D Serial Mouse
3.1.4. Протокол PC Mouse
3.1.5. Совместимость протоколов
3.2. Модем
3.2.1. Команды управления модемом
3.2.2. Регистры модемов
3.2.3. Протоколы передачи файлов
ASCII-протокол
Протокол XModem
Протокол XModem-CRC
Протокол XModem-1K
Протокол YModem
Протокол YModem-G
Протокол ZModem
Протокол BiModem
Протокол Kermit
Глава 4. Промышленные последовательные протоколы
4.1. Протокол MODBUS
4.1.1. Протокол MODBUS-ASCII
4.1.2. Протокол MODBUS-RTU
4.1.3. Поля MODBUS протокола
Поле "Адрес абонента"
Поле "Код функции"
Поле "Данные"
Поле "Контрольная сумма"
4.2. Протокол CAN
4.2.1. Характеристики протокола CAN
4.2.2. Обмен данными в протоколе CAN
4.2.3. Обнаружение ошибок в протоколе CAN
4.3. Протокол Profibus
Глава 5. COM-порты и Plug and Play
5.1. Кратко о Plug and Play
5.2. Запуск процедуры PnP
5.3. Если устройство не находится автоматически…
5.4. Где хранится информация о найденных устройствах
5.4.1. Структура реестра Windows 98
5.4.2. Структура реестра Windows 2000
5.5. Алгоритм Plug and Play для COM-портов
5.5.1. Инициализация порта (Port initialization)
5.5.2. Обнаружение устройств (Check for device)
5.5.3. Установка устройства, фаза 1 (COM port Setup-1)
5.5.4. Ожидание ответа, фаза 1 (Wait for response-1)
5.5.5. Установка устройства, фаза 2 (COM port Setup-2)
5.5.6. Ожидание ответа, фаза 2 (Wait for response-2)
5.5.7. Получение идентификатора (Collect device ID)
5.5.8. Проверка отключения (Verify Disconnect)
5.5.9. Дежурное состояние (Connect Idle)
5.5.10. Состояние ожидания отключения (Disconnect Idle)
5.6. Формат данных для передачи PnP-идентификатора
5.7. Передача PnP-идентификатора
5.8. Поля PnP-идентификатора
5.8.1. Поле Other ID
5.8.2. Поле Begin PnP
5.8.3. Поле PnP Rev
5.8.4. Поле EISA ID
5.8.5. Поле Product ID
5.8.6. Поле Extend
5.8.7. Поле Serial Number
5.8.8. Поле Class Name
5.8.9. Поле Device ID
5.8.10. Поле User Name
5.8.11. Поле Checksum
5.8.12. Поле End PnP
5.8.13. Пример PnP-идентификатора
5.9. INF-файл и его структура
5.9.1. Секция Version
5.9.2. Секция Manufacturer
5.9.3. Секция DestinationDirs
Ключ DefaultDescDir
Ключи file-list-section
Ключ dirid
Ключ subdir
5.9.4. Секция описания модели
5.9.5. Секции xxx.AddReg и xxx.DelReg
5.9.6. Секция xxx.LogConfig
5.9.7. Секция xxx.CopyFiles
5.9.8. Секция Strings
5.9.9. Связи секций
Глава 6. Использование сервисов BIOS
6.1. Подготовка
6.2. Первая программа последовательной связи
6.3. Другие функции BIOS
Глава 7. Прямое программирование портов
7.1. Коммуникационные порты
7.2. Программа определения наличия COM-портов
7.3. Обходим ограничения BIOS
7.4. Чтение и запись с помощью модуля RS232DOS
Глава 8. Использование обработки прерываний
8.1. Прерывания
8.2. Модуль RS232Int для работы с прерываниями
8.3. Последовательный обмен с помощью прерываний
Глава 9. Переход в Windows
9.1. Переходим из DOS в Windows
9.2. Первая программа для Windows
9.3. Перенос программ из Windows 9x в Windows NT/2000
9.3.1. Получение доступа к портам в Windows 2000/XP
9.3.2. Расширение возможностей GiveIO
9.3.3. Работа с драйвером GiveIOEx
9.3.4. Еще немного о прямом доступе к портам
Глава 10. Использование функций Windows
10.1. Обзор функций Windows для работы с последовательными портами
10.2. Специальная настройка порта
10.3. Получение состояния линий модема
10.4. Используем функции Windows
10.5. Несколько замечаний о контроле четности
Глава 11. Использование потоков
11.1. Преимущества потоков
11.2. Создание потока опроса порта
Глава 12. Функции асинхронного доступа и события
12.1. Асинхронный доступ
12.2. События последовательного порта
12.3. Использование событий
Глава 13. Специальные коммуникационные функции
13.1. Выполнение дополнительных операций
13.2. Прямое управление драйвером
13.3. Обнаружение всех портов системы
13.4. Имена портов
13.5. APC-функции Windows 2000/XP
Глава 14. Реализация протоколов обмена
14.1. Прием и передача простого пакета
14.2. Создание компонента
14.3. Реализация ASCII-протокола
14.4. Реализация бинарного протокола
Глава 15. Вычисление контрольных сумм
15.1. Вычисление простой контрольной суммы
15.2. Вычисление LCR
15.3. Вычисление CRC16
15.4. Вычисление CRC32
Глава 16. Интерфейс RS-485
16.1. Стандарт RS-485
16.2. Как работает COM-порт IBM PC
16.3. Реализация RS-485
Глава 17. Работа Plug and Play
17.1. Эмулятор устройства
17.2. Установка драйвера устройства
17.3. Обнаружение изменений
Глава 18. Сервис BIOS INT14H/INT21H
18.1. Сервис BIOS INT14H
18.1.1. Функция 00: инициализация порта
18.1.2. Функция 01: посылка символа в порт
18.1.3. Функция 02: получение символа
18.1.4. Функция 03: получить статус порта
18.1.5. Функция 04: расширенная инициализация (System/2)
18.1.6. Функция 05: расширенное управление портом (System/2)
18.2. Сервис BIOS INT21H
18.2.1. Функция 03H: вспомогательный ввод
18.2.2. Функция 04H: вспомогательный вывод
18.2.3. Функция 3FH: чтение данных через описатель
18.2.4. Функция 40H: запись данных через описатель
Глава 19. Порты IBM PC
19.1. Порт 3F8H (BasePort+0): данные и делитель
19.2. Порт 3F9H (BasePort+1): разрешение прерываний и делитель
19.3. Порт 3FAH (BasePort+2): идентификация прерываний
19.4. Порт 3FBH (BasePort+3): управление линией
19.5. Порт 3FCH (BasePort+4): управление модемом
19.6. Порт 3FDH (BasePort+5): статус линии
19.7. Порт 3FEH (BasePort+6): статус модема
19.8. Порт 3FFH (BasePort+7): заглушка
19.9. Скорость передачи
19.10. Порты контроллера прерываний
Глава 20. Структуры Windows для работы с COM-портами
20.1. Структура настроек порта COMMCONFIG
20.2. Структура COMMPROP
20.3. Структура тайм-аутов COMMTIMEOUTS
20.4. Структура статуса порта COMSTAT
20.5. Структура DCB
Глава 21. Функции Windows для работы с COM-портами
21.1. Функции CreateFile и CloseHandle: открытие и закрытие порта
21.1.1. Дополнительные сведения
21.1.2. Возвращаемое значение
21.1.3. Пример вызова
21.2. Функция ReadFile: чтение данных из порта
21.2.1. Дополнительные сведения
21.2.2. Возвращаемое значение
21.2.3. Пример вызова
21.3. Функция WriteFile: передача данных
21.3.1. Дополнительные сведения
21.3.2. Возвращаемое значение
21.3.3. Пример вызова
21.4. Функция ReadFileEx: APC-чтение данных
21.4.1. Возвращаемое значение
21.4.2. Дополнительные сведения
21.4.3. Пример вызова
21.5. Функция WriteFileEx: APC-передача данных
21.5.1. Возвращаемое значение
21.5.2. Пример вызова
21.6. Функция BuildCommDCB: создание структуры DCB из строки
21.6.1. Дополнительные сведения
21.6.2. Возвращаемое значение
21.6.3. Пример вызова
21.7. Функция BuildCommDCBAndTimeouts: создание структуры DCB и тайм-аутов из строки
21.8. Функции SetCommBreak и ClearCommBreak: управление выводом данных
21.8.1. Возвращаемое значение
21.9. Функция ClearCommError: получение и сброс ошибок порта
21.9.1. Возвращаемое значение
21.10. Функция CancelIo: прерывание асинхронных операций
21.10.1. Возвращаемое значение
21.11. Функция EscapeCommFunction: управление портом
21.11.1. Возвращаемое значение
21.12. Функции GetCommMask и SetCommMask: маска вызова событий
21.12.1. Возвращаемое значение
21.12.2. Пример вызова
21.13. Функция CreateEvent: создание объекта ожидания
21.13.1. Возвращаемое значение
21.13.2. Пример вызова
21.14. Функция WaitCommEvent: ожидание события COM-порта
21.14.1. Возвращаемое значение
21.14.2. Дополнительные сведения
21.14.3. Пример вызова
21.15. Функции GetCommConfig и SetCommConfig: конфигурирование параметров порта
21.15.1. Возвращаемое значение
21.15.2. Пример вызова
21.16. Функция CommConfigDialog: диалог конфигурирования порта
21.16.1. Возвращаемое значение
21.16.2. Дополнительные сведения
21.16.3. Пример вызова
21.17. Функция GetCommProperties: прочитать свойства порта
21.17.1. Возвращаемое значение
21.17.2. Пример вызова
21.18. Функции GetCommState и SetCommState: состояние порта
21.18.1. Возвращаемое значение
21.18.2. Пример вызова
21.19. Функции GetCommTimeouts и SetCommTimeouts: тайм-ауты порта
21.19.1. Возвращаемое значение
21.19.2. Пример вызова
21.20. Функция PurgeComm: сброс буферов порта
21.20.1. Возвращаемое значение
21.20.2. Пример вызова
21.21. Функция SetupComm: конфигурирование размеров буферов
21.21.1. Возвращаемое значение
21.22. Функции GetDefaultCommConfig и SetDefaultCommConfig: настройки порта по умолчанию
21.22.1. Возвращаемое значение
21.23. Функция TransmitCommChar: передача специальных символов
21.23.1. Возвращаемое значение
21.24. Функция GetCommModemStatus: статус модема
21.24.1. Возвращаемое значение
21.24.2. Пример вызова
21.25. Функция WaitForSingleObject: ожидание сигнального состояния объекта
21.25.1. Возвращаемое значение
21.26. Функция WaitForMultipleObjects: ожидание сигнального состояния объектов
21.26.1. Возвращаемое значение
21.27. Функция GetOverlappedResult: результат асинхронной операции
21.27.1. Возвращаемое значение
21.28. Функция DeviceIoControl: прямое управление драйвером
21.28.1. Возвращаемое значение
21.29. Функция EnumPorts: перечисление портов
21.29.1. Дополнительные сведения
21.29.2. Возвращаемое значение
21.29.3. Пример вызова
21.30. Функция QueryDosDevice: получение имени устройства по его DOS-имени
21.30.1. Возвращаемое значение
21.30.2. Пример вызова
21.31. Функция DefineDosDevice: операции с DOS-именем устройства
21.31.1. Возвращаемое значение
21.31.2. Пример вызова
Глава 22. Функции DiviceIoControl для последовательных портов
22.1 Функции драйвера последовательного порта
22.2. Структуры драйвера последовательного порта
22.3. Соответствие функций DeviceIoControl и Windows API
Глава 23. AT-команды и регистры модемов
23.1. Основные AT-команды модемов
23.2. Основные регистры модемов
Приложение 1. Микросхемы UART
Общее описание
Характерные особенности
Описание контактов
Типы микросхем UART
Приложение 2. Библиотека функций для Pascal
Приложение 3. Формат SINGLE чисел с плавающей точкой
Приложение 4. Описание функций Windows для использования в Visual Basic
Приложение 5. Использование ActiveX-компонента MSComm32
Приложение 6. Сервис BIOS — обслуживание INT14H
Приложение 7. Как работает GiveIO
Приложение 8. Реализация процедуры преобразования SINGLE-чисел в строку
Приложение 9. Индикаторы состояния модема
Приложение 10. Инструменты
Порт-монитор
Разработка драйверов Driver Wizard
Разработка драйверов NuMega Driver Studio
Отладчик NuMega SoftICE
Эмулятор компьютера Connectix Virtual PC
Терминал HyperTerminal
Приложение 11. Формат команды Mode
Приложение 12. Часто задаваемые вопросы (FAQ)
FAQ: Общие вопросы
1. Что такое COM и RS и чем они отличаются?
2. Что такое порт?
3. Чем "протокол RS-232" отличается от "интерфейса RS-232"?
4. Что такое контрольная сумма и как ее считать?
5. Откуда взялось ограничение числа абонентов в протоколе RS-485?
6. Почему нужно подключать COM-устройства при выключенном питании?
7. Откуда берется питание для мыши?
8. Что означает режим HANDSHAKING?
9. Что такое дуплексная и полудуплексная передача?
FAQ: Программирование в DOS
1. Что такое базовый адрес порта?
2. Написал программу обработки прерываний порта, а она периодически "виснет". Для других прерываний все нормально работает
3. При выводе на экран данных, полученных в обработчике прерывания, выводится "мусор"
4. Прерывание и основная программа используют один буфер. Как их синхронизировать в DOS?
5. Как бы перехватить вывод программы в COM-порт под DOS?
FAQ: Программирование в Windows
1. Почему в Delphi пропал оператор Port и как тогда обращаться к портам?
2. Можно ли использовать прямое обращение к портам в Windows NT/2000?
3. Программа асинхронно работает с портом. В Windows 98 все работало, а в Windows 2000 или "виснет", или не работает
4. Зачем надо использовать WaitForSingleObject, если уже есть вызов GetOverlappedResult?
5. Как найти все доступные COM-порты?
6. Как бы перехватить вывод программы в COM-порт под Windows?
7. Как выключить Plug and Play для COM-порта при загрузке Windows?
FAQ: Связь, модемы, терминалы
1. Что такое FIFO и FOSSIL?
Приложение 13. Описание компакт-диска
Литература и Интернет-ресурсы
Предметный указатель