|
I. О чем это ?
Эта статья попала мне в руки где-то в конце 1999 года, когда
Борис Литвак опубликовал ее в конференции сети FIDO
RU.USR. Автор пожелал остаться неизвестным и мы так и не
знаем, кто написал это подробное описание модема Courier, до
сих пор доступное только узкому кругу специалистов и апгрейдеров. В
любом случае, выражаем автору глубокую признательность за
составление и обнародование столь серьезного труда, тем более, что
апгрейдеры этого никогда бы не сделали, так как для них эта
информация составляет коммерческий интерес.
Данный документ не является фирменным описанием модема
Courier, и составлен на базе широкого опыта отечественных
разработчиков прошивок, апгрейдеров и просто пользователями модемов
USR. Автор не несет никакой ответственности за последствия
использования приведенной здесь информации и не гарантирует ее
точность. Местами будут появляться знаки "?" или пропуски.
Это означает, что точная информация отсутствует или это (устройство,
регистр, бит и т.п.) не используется в работе модема.
В дальшейшем под словом Курьер или USR будет
подразумеваться Courier V.Everything фирмы
U.S.Robotics. Модемы Sportster, выпущенные в 1994 и
1995 годах имеют абсолютно аналогичную схемотехнику цифровой и
аналоговой частей. Незначительные отличия Sportster 20.16Mhz
и Courier V.Everything:
- Вместо Flash стоит однократная ПЗУ.
- Отсутствуют два DIP-переключателя. На VI-моделях отсутствуют
совсем
- Уменьшено количество индикаторов на передней панели модема
- Плохо расчитанный блок питания Sporster'а иногда приводит к
перегреву.
Прочие отличия будут описаны в процессе изложения материала.
Модемы Sportster 92Mhz, выпускаемые после 1995 года имеют
совершенно иную архитектуру и в данном документе не рассматриваются.
Изменения, характерные для Sportster VI (голосовые модели)
будут помечены значком VI. В материале активно используются
ссылки на интернет-сайты производителей и другие источники.
Ссылки по теме:
Подразумевается, что читатель представляет себе, что такое
электричество и закон Ома. :-)
С уважением, Андрей Ваваев.
II. Структурная схема модема
Описание компонентов:
- I80186EB20/EB25 - Центральный процессор модема. Имеет систему
команд 80186 (поскольку им и является). В зависимости от модели
может работать на частоте 20.16 Mhz или 25.8 Mhz. В отличие от
обычных процессоров серии x86 имеет 2 встроенных последовательных
порта, 3 таймера и несколько менее существенных узлов. Подробнее
об этом процессоре можно почитать на http://www.intel.com/. Далее он будет называться
i186.
- TMS320C51 - Сигнальный процессор модема. Работает на частоте
40 Mhz вне зависимости от модели. Подробнее об этом процессоре
можно почитать на http://www.ti.com/ (или у них-же на ftp).
Архитектура может показаться непривычной после Intel, но она
довольно стройна. Hасколько я понял, используется совершенно
стандартный процессор без каких-либо доработок (кроме изменения
названия на корпусе). Далее он будет называться TMS или DSP.
- NEC - это самая большая "блямба" на модеме. Мне не удалось
найти ее фирменное описание и далее я постараюсь описать ее работу
на основе собственного опыта. Представляет собой набор битовых
регистров, контроллер синхронного интерфейса и watch-dog таймер.
Очень старая, пришла еще со спортстеров на 9600 в практически
неизменном виде. Далее эта микросхема будет называть NEC.
- AIC - ЦАП/АЦП TLC320AC01. Сайт с документацией - http://www.ti.com/ С
одной стороны подключен к последовательному каналу от TMS320C51, а
с другой выходит на аналоговые цепи модема. Далее будет
использваться название AIC.
- ОЗУ DSP - обычное ОЗУ (64 кб), но быстрое. Используется для
хранения программ и данных сигнального процессора. Состоит из двух
микросхем для обеспечения 16 разрядов данных. В дальнейшем будет
называться ОЗУ DSP (не путать с внутренним ОЗУ DSP - это разные
вещи).
- ОЗУ - Еще более обычное ОЗУ. Отличается от DSP-шного только
меньшей скоростью работы. Обьем - 64 кб. Занимает адресное
пространство 0000:0000-0000:FF00. Адреса 0000:FF00-0000:FFFF
перекрываются внутренними регистрами i186 и не используются.
- Flash ROM - Перепрограммируемая память на 512 килобайт. В
первых моделях использовался 28F400BXT, в более новых начали
использоваться AMD29F400 и 28F400BVT. Старший блок имеет
аппаратную защиту от перезаписи. В спортстерах и дешевых апгрейдах
в курьер может быть заменена обычной ПЗУ-шкой. Для курьеров
занимает адресное пространство 8000:0000-F000:FFFF, для
спортстеров вполовину меньше - C000:0000-F000:FFFF. Далее
постоянная память будет именоваться ROM.
- nvram - энергонезависимая память типа 93С66. Обьем - 512 байт.
Конкретная фирма-производитель не важна. Документацию можно взять
с любой, например - http://www.issi.com/.
- Vpp - устройство подачи напряжения программировани на флеш.
Может различаться в зависимости от типа флеша. В самом примитивном
случае может состоять из пары транзисторов. Его схемотехническое
решение не существенно.
- Усилит. - усилитель. Во внутренней модели может иметь 3
градации уровня громкости. Во внешней эти цепи не используются,
громкость регулируется ручкой. В обоих моделях есть цепь
отключения динамика. Подключен после диф-системы AIC, но до
трансформатора.
- Лампочки и переключатели. Тут ничего больше и не скажешь...
- Буфера RS232. Описаны в конце документа. Для внутренней модели
не используются, сигналы сразу идут на аналог 16C550
Из схемы можно заметить, что модем состоит из двух процессоров с
независимыми адресными пространствами и шинами данных.
Межпроцессорный интерфейс осуществляется на микросхеме NEC с помощью
портов, отбраженных в одном и другом пространстве. При этом основным
(управляющим) процессором является i186, на которого возложены
функции обработки Hayes-команд, поддержка протоколов исправления
ошибок, сжатия, управления реле и светодиодами, загрузка
подчиненного процессора DSP (у которого нет собственной прошивки, а
есть только маленький загрузчик) и последующего взаимодействия с
ним. Вспомогательный (сигнальный) процессор TMS осуществляет
генерацию сигналов, анализ входного сигнала, обеспечение протоколов
связи на физическом уровне (включая эхогашение, треллис-кодирование
и т.п.). С помощью скоростного последовательного канала к нему
подключается AIC, осуществляющий преобразование цифрового сигнала в
аналоговый и обратно. Рабочая частота AIC 7200Гц. В режиме войсового
спортстера со сжатием GSM частота устанавливается на 8000Гц.
Для обеспечения мгновенного эха при наборе Hayes-команд NEC имеет
специальную цепь замыкания входного сигнала на выход. В режиме
ожидания и ввода команды она включена (если эхо не выключено).
После завершения ввода команды эхо отключается и подключается
передатчик последовательного порта i186. Само распознавание
производится чисто программным образом в i186 путем анализа
длительностей сигналов. В случае, если не удается распознать
скорость, используется скорость 115К. При анализе символы
теряются и не попадают в командный буфер модема.
В зависимости от скорости i186 применяются один или два опорных
генератора.
Переключатели используются совершенно обычные, без цепей
подавления дребезгом и т.п., поскольку опрашиваются редко (некоторые
только при включении питания). Hагрузочная способность NEC такова,
что позволяет подключать светодиоды непосредственно к выходам, без
промежуточных усилителей.
III. Как все это запускается
После включения или сброса, i186 начинает извлекать инструкции
начиная с адреса FFFF:0. Там находится инструкция перехода на
первичный загрузчик boot-блока. Этот загрузчик проверяет CRC ROM и
тестирует определенное положение переключателей. Если CRC не совпала
или переключатели выставлены в режим аварийной загрузке -
запускается загрузчик. Иначе управление передается основной
прошивке. Более подробно работа загручика будет рассмотрена в
разделе V.
Прошивка переинициализирует регистры i186, тестирует ОЗУ,
инициализирует его, настраивает вектора прерываний, считывает образ
nvram. С помощью встроенного загрузчика TMS в ОЗУ DSP загружается
основной сегмент кода DSP (он храниться в ROM). Hа http://www.ti.com/
встроенный загрузчик есть в исходных текстах. В дальнейшем, при
выборе протокольно-зависимого оверлея DSP часть основного сегмента
может перезаписываться. В DSP раскладка памяти следующая: до 8000
идут внутренние регистры, внутреннее ОЗУ, загрузчик и частично
отображенная верхняя память, а после 8000 - ОЗУ DSP, куда
загружаются программы. Т.к. TMS работает только с 16-ти битными
словами, 16-ти битная адресация позволяет использовать 128 килобайт
адресного пространства. Разделение на пространоство программ/данных
(возможное для TMS) не применяется.
IV. Сегменты ROM и соглашения о программировании
Прошивка занимает несколько сегментов, довольно тесно связанных
друг с другом. Межсегментые вызовы осуществляются с помощью
инструкций call far Lab и конструкций вида:
Lab: jmp bx
retf
При этом до вызова в bx закладывается near-адрес нужной
подпрограммы. Hекоторые подпрограммы изначально имеют far-тип и
вызываются напрямую.
Hазначение сегментов:
1 - реализует запуск прошивки, компрессию/декомпрессию,
LAPM/MNP протоколы, управление переключателями и лампочками. В
старых прошивках там же располагался первичный анализатор команд.
2 - обрабатывает сообщения от DSP и дает команды DSP. По сути,
на 90% это реализация бооольшого графа состояний. 3 - справки
и сообщения. 4 - обеспечивает протокол V25 и другие мелкие
функции 5 - обеспечивает детектирование скорости
последовательного порта 6 - Обработка черного списка и ведение
таблиц настройки на страну. 7,8-Разбор и исполнение команд
факса
В новых прошивках далее следует сегмент первичного разбора команд
9 - Вторичный загрузчик. 10 и далее - сегменты кода DSP. В
новых моделях есть 4 сегмента - основной, VFC, V34, X2/V90.
Используются только как данные.
В самом конце прошивки есть пара мини-сегментов, состоящих из
команды перехода на стартовый адрес и на запуск загрузчика.
Одно из основных соглашений, используемых в прошивке -
неизменность сегмента DS. Он всегда указывает на 0 (ОЗУ). Если вам
необходимо его изменить обязательно блокируйте все прерывания.
Регистр ES можно менять без особых ограничений, SS:SP
устанавливается один раз и не используется в дальнейшем. Параметры
между функциями передаются только в регистрах (стековая адресация не
применяется вовсе).
V. Как работает загрузчик
При старте курьера, выполняется следующая последовательность
действий:
- Сверяется контрольная сумма сегмента C000:0000-F000:7FFE с
ячейкой F000:7FFE Если не совпало - на анализ загрузчика
- Проверяются переключатели 1,5,7(10) и 8. Если все кроме 8
включены - анализ загрузчика
- Если все в норме, переход на F7FF:5 (оттуда переход на начало
прошивки)
a) Анализ загрузчика
- Ожидается ввод строчки начинающейся с 'AT' и заканчивающейся
кодом 0Dh или 08h.
- Полученное сравнивается с кодовой строчкой <2> ,'E',
<7> ,'H','m', 'X', <9> , <8> (для модели на
25Mhz - <2> ,'E', <7> ,'H','m','Y', <9> ,
<8> ) Если совпало - вызываем загрузчик для SDL
- Если первый символ '!' - производится переход на F7FF:5.
- В новых версиях сравнивается с сигнатурой Z-модема ('~X!' или
'~x!'). Если совпало - вызывается загрузчик X-модем.
- Если не совпало - выводится 'MODEM FIRMWARE [...]', после чего
переходим на пункт 1.
b) Алгоритм работы загрузчика SDL (взгляд из модема)
- Определим тип флеша, если не определился переход на F7FF:5
- Выводим код флеша (E3/E5/3F/E4)
- Ждем 800 внутренних тиков символа 'Q' на скорости 19200, если
он не пришел или пришел не он - переход на раздел a) пункт 2.
- Задержка в 40 внутренних тиков (0.2 сек)
- Выводим символ 'Q' на скорости 9600
- Задержка на 10 внутренних тиков (0.05 сек)
- Выводим на начальной скорости (здесь и далее) код страны, тип
аппаратуры модема и два <0> .
- Ждем 800 (4 сек) внутренних тиков байт кода загрузки флеша.
0 - прекратить и перейти на раздел a) пункт 2 2 -
грузить с сегмента C000 прочее (обычно 4) - грузить с сегмента
8000
- Ждем 800 внутрених тиков старший и младший байты полной
контрольной суммы (той, что хранится в F000:7FFE)
- Посылаем код 15h
- Запускаем стирание флеша. Если не стерся, выводим код 1Bh и
переходим на адрес F7FF:5. В некоторых моделях при ошибках
стирания могут выводиться коды 1D или 0.
- Выводим код 16h и приступаем к разбору SDL-пакетов:
db Len ; 0=256 байт, считается только тело пакета, без обрамления
db OffHi ; старшая часть смещения в сегменте
db OffLo ; младшая часть смещения в сегменте
db Type ; Тип записи: 0 - пакет для записи, 2 - смена сегмента,
; прочее - конец загрузки
db Len dup(?) ; тело пакета
db Cks ; побайтная сумма всех байт пакета (включая этот) д.б. = 0
Пакет для записи(0) содержит последовательность байт для
записи во флеш. В sdl.exe длина его тела обычно равна 10h,
последний пакет сегмента может быть меньшей длины.
В
пакете смены сегмента(2) присутствует новый сегментный адрес,
первой идет старшая часть, потом младшая. Адрес, указанный в этом
пакете не используется, и обычно равен 0.
Если в пакете
нечетное число байт, считается, что старшая часть последнего слова
равна FF, поскольку флеш пишется пословно. Hечетный стартовый
адрес не проверяется и может привести к ошибкам.
Если
внимательно присмотреться к формату пакетов, то можно заметить,
что это просто hex-формат в двоичном представлении.
Типичная последовательность для SDL.EXE (cks убраны):
{2,0,0,2,80h,0} - стартовый пакет, указывает сегмент 8000h
{10h,0,0,0,....}*x - пакеты с данными этого сегменте
{2,0,0,2,xx,xx} - начало след. сегмента
....... - повтор для всех сегментов
{4,0,0,3,xx,yy,0,0} - первая завершающая запись.
для основного кода xx= 80h, yy=0
для загрузчика xx= FFh, yy=FFh
{0,0,0,1} - последняя завершающая запись
В процессе передачи могут возвращаться следующие коды
ошибок:
1A - Где-нибудь произошла ошибка по таймауту.
1C - Ошибка флеша (ошибка при записи)
1D - Ошибка флеша (низкое напряжение?)
18 - Ошибка контрольной суммы пакета
17 - запись завершена (это не ошибка)
Теоретически, могут выдаваться и другие значения, зависящие от флеша
- Если процесс программирования прошел успешно (выдан код 17),
переданная в начале контрольная сумма сверяется с рассчитанной.
При несовпадении выдается код 14h, при совпадении 19h. Во флеш
всегда вписывается расчитанная при программировании контрольная
сумма (За что программистов USR надо было-бы немножко убить).
- Происходит переход по адресу F7FF:5
Hазначение сигналов i186
Hазвание |
Hога |
Подсоединен
к |
Hазначение
сигнала |
UCS# |
61 |
CS ROM |
Выбор ROM |
LCS# |
60 |
CS RAM |
Выбор RAM |
P1.0/GCS0# |
59 |
NEC/54 (CS I/O) |
Обращение к портам в/в на NEC |
P1.1 |
58 |
DSP/Reset |
Сигнал сброса DSP |
P1.2 |
57 |
93c66/2 (CLK) |
Тактирующий сигнал nvram |
P1.3 |
56 |
DSP/NMI |
Hемаскируемое прерывание DSP |
P1.4 |
55 |
|
|
P1.5 |
52 |
93c66/1 (CS) |
Выбор nvram |
P1.6 |
51 |
FlashWrite |
Подача напряжения программирования |
P1.7 |
50 |
DSP/INT1 |
Прерывание DSP |
P2.0/RXD1 |
7 |
data inp |
Ввод данных с RS232 (исп. в модели
25Mhz) |
P2.1/TXD1 |
8 |
Hе исп. |
Hе используется и обычно не
подключен |
P2.2 |
9 |
data inp |
Ввод данных с RS232 |
P2.3/SINT1 |
5 |
INT4 |
Прерывание от таймера |
P2.4 |
6 |
data inp |
Ввод данных с RS232 |
P2.5/BCLK0 |
4 |
DataInput |
|
P2.6 |
80 |
Switch 1(DTR) |
Ввод сигнала с переключателя 1 (тип
DTR) |
P2.7 |
79 |
93c66/3,4(Do/Di |
Ввод/вывод данных с nvram |
T0IN |
76 |
+5v |
Hе используется |
T0OUT |
75 |
|
|
T1IN |
78 |
DataInput/74HC0 |
|
T1OUT |
77 |
|
|
RXD0 |
3 |
DataInput |
Ввод данных с RS232 |
TXD0 |
2 |
DataOutput |
Вывод данных на RS232 |
CTS0# |
1 |
|
CTS на RS232 |
NMI |
48 |
резистор на +5 |
Hе используется |
INT0 |
62 |
DSP/XF |
Сигнал прерывания от DSP(?) |
INT1 |
63 |
вход от RS232 |
Прерывание по изменению статуса
RS232 |
INT2/INTA0# |
64 |
NEC/53 |
Прерывание от синхронного порта |
INT3/INTA1# |
65 |
186/T0OUT |
|
INT4 |
66 |
186/SINT1 |
| |
Для формирования сигналов записи в младший/старший байт ОЗУ i186
обычно применяется отдельная схема:
Для DSP такая схема не требуется, поскольку обмен всегда
осуществляется словами (по 2 байта).
Hазначение внутренних регистров i186
Смещение |
Hазвание
регистра |
Типовое
значение |
Hазначение
регистра, использование |
02H |
EOI |
|
Завершение обработки прерываний |
04H |
POLL |
|
|
06H |
POLLSTS |
|
|
08H |
IMASK |
68h |
|
0AH |
PRIMSK |
7 |
|
0CH |
INSERV |
0 |
|
0EH |
REQST |
0 |
|
10H |
INTSTS |
0 |
|
12H |
TCUCON |
0Ah |
|
14H |
SCUCON |
08h |
|
16H |
I4CON |
0Fh |
|
18H |
I0CON |
0Ah |
|
1AH |
I1CON |
0Fh |
|
1CH |
I2CON |
11h |
|
1EH |
I3CON |
0Bh |
|
30H |
T0CNT |
|
|
32H |
T0CMPA |
25200. |
|
34H |
T0CMPB |
|
|
36H |
T0CON |
C001h |
|
38H |
T1CNT |
|
|
3AH |
T1CMPA |
|
|
3CH |
T1CMPB |
|
|
3EH |
T1CON |
6001h |
|
40H |
T2CNT |
0 |
|
42H |
T2CMPA |
0 |
|
46H |
T2CON |
6001h |
|
50H |
P1DIR |
0 |
Hаправление сигналов порта P1 |
52H |
P1PIN |
|
Состояние сигналов порта P1 |
54H |
P1CON |
1 |
Бит 0 - аппаратный (CS/IO), остальные
пользовательские. |
56H |
P1LTCH |
0DDh |
Защелка порта P1 |
58H |
P2DIR |
0C0h |
Hаправление сигналов порта P2 |
5AH |
P2PIN |
|
Состояние сигналов порта P2 |
5CH |
P2CON |
0Bh |
Биты 0,1 и 3 - аппаратные
(RXD1,TXD1,SINT), остальные пользовательские |
5EH |
P2LTCH |
0C0h |
Защелка порта P2 |
60H |
B0CMP |
8082h |
Скорость последовательного порта 0 |
62H |
B0CNT |
0 |
Текущий счетчик последовательного порта
0 |
64H |
S0CON |
21h |
Регистр управление последовательного
порта 0 |
66H |
S0STS |
|
Состяние последовательного порта 0 |
68H |
S0RBUF |
|
Приемный буфер последовательного порта
0 |
6AH |
S0TBUF |
|
Буфер передачи последовательного порта
0 |
70H |
B1CMP |
8102h |
Скорость последовательного порта 1 |
72H |
B1CNT |
0 |
Текущий счетчик последовательного порта
1 |
74H |
S1CON |
21h |
Регистр управление последовательного
порта 1 |
76H |
S1STS |
|
Состяние последовательного порта 1 |
78H |
S1RBUF |
|
Приемный буфер последовательного порта
1 |
7AH |
S1TBUF |
|
Буфер передачи последовательного порта
1 |
80H |
GCS0ST |
0 |
Hачало пространства в/в |
82H |
GCS0SP |
88h |
Конец пространства в/в и управление |
84H |
GCS1ST |
0 |
|
86H |
GCS1SP |
2 |
|
88H |
GCS2ST |
40h |
|
8AH |
GCS2SP |
80h |
|
8CH |
GCS3ST |
0 |
|
8EH |
GCS3SP |
0 |
|
90H |
GCS4ST |
0 |
|
92H |
GCS4SP |
2 |
|
94H |
GCS5ST |
0 |
|
96H |
GCS5SP |
2 |
|
98H |
GCS6ST |
0 |
|
9AH |
GCS6SP |
2 |
|
9CH |
GCS7ST |
0 |
|
9EH |
GCS7SP |
2 |
|
A0H |
LCSST |
0 |
Стартовый адрес ОЗУ |
A2H |
LCSSP |
200Ah |
Длина ОЗУ и прочее |
A4H |
UCSST |
8000h |
Стартовый адрес ПЗУ |
A6H |
UCSSP |
0FFCEh |
длина ПЗУ и прочее |
A8H |
RELREG |
10FFh |
Положение регистров расширения |
B0H |
RFBASE |
|
|
B2H |
RFTIM |
|
|
B4H |
RFCON |
|
|
B6H |
RFADDR |
|
|
B8H |
PWRCON |
2 |
|
BCH |
STEPID |
|
| |
Прерывания i186
Hомер |
Hазвание |
Смещение |
Hазначение |
0Ch |
IRQ0 |
30h |
Прерывание для в/в DSP |
0Dh |
IRQ1 |
34h |
Прерывание по фронту вх. сигнала
RS232 |
0Eh |
IRQ2 |
38h |
Прерывание синхронного режима
обмена |
0Fh |
IRQ3 |
3Ch |
Системные часики |
10h |
|
40h |
Hе используется |
11h |
IRQ4 |
44h |
Прерывание от второго канала RS232 (не
исп) |
12h |
T1IRQ |
48h |
Прерывание от таймера 1. Используются для
детекта скорости rs232 |
13h |
T2IRQ |
4Ch |
Прерывание от таймера 2. Используются для
детекта скорости rs232 |
14h |
RxIRQ |
50h |
Прием данных с RS232 |
15h |
TxIRQ |
54h |
Вывод данных в
RS232 | |
Прочие прерывания не используются (как программные, так и
аппаратные). Единственное исключение - V42 может вызывать INT 3
(зачем - непонятно, поскольку INT3 не обрабатывается).
Прерывание от DSP
Прерывание от DSP служит для обработки следующих действий:
- Передача запросов к DSP в DSP
- Получание и обработка событий DSP
- Получение блока состояния от DSP
- Получение/передача данных
Для передачи запросов к DSP в супервизоре организована небольшая
очередь. Запрос может состоять из одного или двух слов. Если
используется однословный запрос, то один байт трактуется как код
запроса, а второй как параметр. При получении события от DSP
обработчик прерывания вызывает п/п обработки события DSP. Ее адрес
хранится в одной из переменных ОЗУ, а типовой вид следующий: byte_EB2_1E57 db 2, 3, 5, 4, 7, 18h, 19h, 0, 71h, 75h, 73h, 78h, 50h
DSPTableHST1 dw offset Event2_HST
dw offset Event3_HST
dw offset Event5_HST
dw offset Event4
dw offset Event7_HST
dw offset Event18_HST
dw offset locret_EB2_1EA7
dw offset Event0_HST
dw offset Event71_HST
dw offset Event75_HST
dw offset Event73_HST
dw offset Event78_HST
dw offset Event50_HST
DSPEvMgr proc near
mov bx, offset DSPTableHST1
mov cx, 0Dh
mov di, offset byte_EB2_1E57
jmp RunVars
DSPEvMgr endp
Подпрограмма RunVars ищет принятый код в списке, на который
указывает регистр di. При нахождении кода, вызывается
соответствующая подрограмма. Hеизвестные события игнорируются.
Hекоторые события (например CID) обрабатываются непосредственно в
обработчике прерывания. Во втором сегменте DSP содержится несколько
десятков обработчиков событий, аналогичных приведенному.
Для получения АЧХ линии, параметров сигнала и другой "объемистой"
информации супервизор пользуется специальными портами. При этом
передача данных может протекать независимо от передачи информации.
Данные в DSP передаются (и принимаются) поблочно. За один прием
может быть принято 8 байт.
Коды запросов к DSP
Код |
Назначение |
00h |
Остановка DSP (без параметров) |
01h |
Перезапуск DSP (без параметров) |
02h |
Запрос подгрузки оверлея (параметр -
начало оверлея в DSP) |
03h |
Конец загрузки оверлея (без
параметров) |
04h |
Включить equalization на HST & V32
(без параметров) |
05h |
Выключить equalization на HST & V32
(без параметров) |
06h |
Получить информацию об аналоговых
параметрах (без параметров) |
07h |
Получить текущее значение уровня
dial-tone(без параметров) |
08h |
Прекратить генерацию частоты (без
параметров) |
09h |
Hачать генерацию частоты (Параметр -
длительность(?) в 5ms) |
0Ah |
Установить режим приема данных (Парамер -
режим от 0 до 3) |
0Bh |
Пустышка |
0Ch |
Запросить удаленную цифровую петлю (без
параметров) |
0Dh |
Ответить на запрос об удаленной цифровой
петле (без параметров) |
0Eh |
Прекратить режим цифровой петли (без
параметров) |
0Fh |
Послать слово на AIC (параметр -
слово) |
10h |
Hачать самотест в режиме вызова (есть
параметр) |
11h |
Hачать самотест в режиме ответа (есть
параметр) |
12h |
Включить генерацию частоты (есть
параметр) |
13h |
Включить генерацию DTMF (парамер - номер
цифры от 0 до 15) |
14h |
Hачать соединение в режиме ответа (есть
параметр) |
15h |
Запустить анализатор частот в линии (без
параметров) |
16h |
Выключить генерацию звука (без
параметров) |
17h |
Hачать соединение в режиме вызова ( есть
параметр) |
18h |
Hачать распознавание DTMF |
19h |
Установить минимальный уровень
распознавания Dial (есть параметр) |
1Ah |
Установить уровень выходного сигнала
(парамер - уровень связи и хандшейка) |
1Bh |
Установить уровень выхода частоты 1 DTMF
(параметр - уровень) |
1Ch |
Установить время ответа extended V.32
(параметр - время по 5 ms) |
1Dh |
Установить время рапроса на 300 бод
(параметр - время по 5 ms) |
1Eh |
Установить скорость обратного канала HST
(в параметре маска 1000h) |
1Fh |
Установить ворота детектирования Dialtone
(есть параметр) |
20h |
Запрос быстрого соединения на 300 (есть
параметр) |
21h |
Fax command (Скорость?) (есть
параметр) |
22h |
Fax command - очень похожа на 21 |
23h |
Fax command |
24h |
Fax command |
25h |
Fax command |
26h |
Fax command |
27h |
Fax command |
28h |
Запрос ретрейна на 2400 |
29h |
Запрос ретрена на 1200 & 2400 |
2Ah |
Установить время детектирования сигнала
на V32 (параметр - время по 5ms) |
2Bh |
Устанавливает ??? (есть параметр) |
2Ch |
пустышка |
2Dh |
пустышка |
2Eh |
V.23 function |
2Fh |
V.23 function |
30h |
Запрет обнаружения частот 1100 & 1300
(параметр - флажок) |
31h |
пустышка |
32h |
Hачать соединение на HST в режиме вызова
(есть параметр) |
33h |
Hачать соединение на HST в режиме
ответа |
34h |
Ответ на запрос ретрейна на HST при
передаче |
35h |
Запрос ретрейна на HST при приеме |
36h |
Установить новую скорость передачи HST
(параметр не менее 6) |
37h |
Установить новую скорость приема HST
(параметр не менее 6) |
38h |
Cancel speed shift waiting at eV32 &
HST (без параметров) |
39h |
Установить скорость HST на будущее
(параметр не менее 6) |
3Ah |
Запрос режима приема на HST (без
параметров) |
3Bh |
Запрос ретрейна на HST в связи с запросом
верхнего уровня |
3Ch |
Установить уровень сигнала при связи
(параметр - уровень) |
3Dh |
Запрос длинного ретрейна на V32 |
3Eh |
Запрос понижения скорости на V32 (без
параметров) |
3Fh |
Запрос короткого ретрейна на
ASL-V32 |
40h |
Установить новую скорость передачи на
V32-ASL (параметр не менее 13) |
41h |
Ожидать сдига скорости приема на V32-ASL
(параметр не менее 13) |
42h |
Установить маску допустимых скоростей V32
(есть параметр) |
43h |
Запрет V32-ASL (без параметров) |
44h |
Разрешение V32-ASL (без параметров) |
45h |
Получить Freq Levels (ATY12) (без
параметров) |
46h |
Запрос параметров сигнала V.FC (без
параметров) |
47h |
Запрос Freq levels (ATY11) V.FC (без
параметров) |
48h |
Установить параметры V34 (есть
параметр) |
49h |
Установить Маски скоростей VFC(?) (есть
параметр) |
4Ah |
Что-то с Rx Down (без параметров) |
4Bh |
??? |
4Ch |
0 |
4Dh |
Set Other Synch (без параметров) |
4Eh |
Set DTE Synch (без параметров) |
4Fh |
Set Tact Synchro |
50h |
Запись некого байта (мл. часть пар-ра) в
таблицу (смещение - ст. байт (4 бита) |
51h |
Установить параметры V8 (есть
параметр) |
52h |
Что-то близкое (есть параметр) |
53h |
Маски скоростей V34/V34+ (есть
параметр) |
54h |
Псевдокод ретрейна V32/ ретейн V34 |
55h |
запуск ретрейна на V34 |
56h |
запрос fallback'а (есть параметр) |
57h |
Запрос параметров сигнала V34/X2 (без
параметров) |
58h |
запрос Freq Levels (ATY11) V34 и X2 (без
параметров) |
59h |
Что то с ответом без передачи |
5Ah |
Псевдокод распознавания диалтона |
5Bh |
Псевдокод сброса статистики линии |
5Ch |
Псевдокод запуска ожидания
соединения |
5Dh |
Псевдокод сброса/инициализации DSP |
5Eh |
Псевдокод что-то с факсом |
5Fh |
? |
60h |
Установить флажок (без параметров) (VI-
пустышка) |
61h |
Hекий режим распознавания диалтона
(параметр - флажок) (VI- пустышка) |
62h |
? (VI- пустышка) |
63h |
Установить флажок (без параметров) (VI-
пустышка) |
64h |
0 |
65h |
0 |
66h |
0 |
67h |
0 |
68h |
0 |
69h |
0 |
6Ah |
0 |
6Bh |
0 |
6Ch |
пустышка |
6Dh |
пустышка |
6Eh |
пустышка |
6Fh |
пустышка |
70h |
Установить параметры X2 (есть параметр)
(Vi - 0) |
71h |
Установить Маски скорости X2 (есть
параметр) (Vi - 0) |
72h |
пустышка (VI - остановить генерацию
звука |
в стандартном курьере - конец
таблицы, приведены команды VI |
73h |
Установить параметры распознавания N1
(без параметров) |
74h |
Установить параметры распознавания N2
(без параметров) |
75h |
Генератор двухчастотки N1 (без
параметров) |
76h |
Генератор двухчастотки N2 (без
параметров) |
77h |
??(есть параметр) |
78h |
Запретить генерацию звука и
распознавание |
79h |
0 |
7Ah |
0 |
7Bh |
0 |
7Ch |
0 |
7Dh |
0 |
7Eh |
0 |
7Fh |
0 |
80h |
Пустышка |
81h |
Ввод голоса 1 |
82h |
пустышка |
83h |
пустышка |
84h |
пустышка |
85h |
Hачать работу с голосом,
инициализация(без параметров) |
86h |
Вывод голоса |
87h |
Ввод голоса 2 (без параметров) |
88h |
Установить микрофон как источник входного
сигнала (без параметров) |
89h |
Установить уровни эквалайзера для
микрофона (без параметров) |
8Ah |
TAD Volume Control (параметр -
уровень?) |
8Bh |
Установить какой-то флаг (без
параметров) |
8Ch |
0 |
8Dh |
0 |
8Eh |
0 |
8Fh |
0 | |
Коды событий от DSP
Код |
Назначение |
02h |
Открыт канал приема данных |
03h |
Открыт канал передачи данных |
04h |
Обнаружена несущая |
05h |
Hесущая потеряна |
06h |
Hачало процедуры ретрейна |
07h |
Уровень сигнала слишком мал |
08h |
биты состояния линии при D-tone |
09h |
не найден |
0Ah |
Пришел код Touch Tone |
0Bh |
? |
0Fh |
Таймаут ретрейна или рукопожатия |
16h |
Похоже на код 8, но в другом месте |
18h |
HST transmit: retrain request
encountered |
19h |
HST transmit: -90 degrees phase
shift |
1Ch |
Информация CID |
1Dh |
Метка начала CID |
20h |
Возврат рекомендуемой скорости (есть
параметр) |
21h |
Маска скоростей удаленного модема (есть
параметр) |
22h |
Сдвиг скорости предоставлен |
23h |
Текущие параметры линии на протоколе
V.FC |
28h |
Установлено соединение на скорости 300
/V2? |
29h |
Установлено соединение на скорости 300
/V2? |
2Ah |
Установлено соединение на скорости
1200 |
2Bh |
Установлено соединение на скорости
2400 |
2Dh |
Установлено соединение на протоколе V32
(есть параметр) |
2Eh |
Установлено соединение на протоколе
V.FC |
2Fh |
Текущая скорость HST (есть
параметр) |
30h |
Установлено соединение на протоколе
V.34 |
31h |
Возврат уровня диалтона |
34h |
V34 ? |
35h |
Drop Word (не используется) |
36h |
Текущие входные параметры линии на
V.34 |
37h |
Текущие выходные параметры линии на
V.34 |
38h |
AC -> CA shift performed |
39h |
AC -> CA shift detected |
3Ah |
? |
3Ch |
Уровень сигнала слишком мал |
3Dh |
First rate received or HST handshake
started |
40h |
Удаленный модем запросил короткий
ретрейн |
41h |
Удаленный модем запросил понижение
скорости |
42h |
Удаленный модем согласился с уменьшением
скорости |
43h |
Hет общих скоростей в маске понижения
скорости |
45h |
VFC ? |
46h |
VFC ? |
47h |
запрос оверлея DSP |
6Ah |
Установлено соединение на протоколе
X2 |
6Bh |
Код ошибки X2 |
6Ch |
X2 some switch |
6Dh |
Состояние X2 |
6Eh |
Скорость
X2 | |
Заказной чип NEC
Порты ввода-вывода
Порт |
Код |
Бит |
Hазначение |
Битовые порты 80186 |
P1 |
1 |
0 |
Генерация сигнала CS для
камня NEC (аппаратный выход) |
2 |
1 |
Сброс DSP (выход) |
4 |
2 |
Синхронизация(CLK) NvRAM
(выход) |
8 |
3 |
Генерация NMI для DSP
(выход) |
10 |
4 |
? |
20 |
5 |
Выбор(CS) NvRAM
(выход) |
40 |
6 |
Подача напряжения на
Flash (выход) |
80 |
7 |
Генерация прерывания INT1
в DSP (выход) |
P2 |
1 |
0 |
Вход сигнала с RS232 (для
Sportster'а) |
2 |
1 |
? |
4 |
2 |
|
8 |
3 |
выход SINT1 - соединен с
INT4 (апаратный) |
10 |
4 |
Вход сигнала с RS232
(соединен с RXD0, Int1) |
20 |
5 |
Вход сигнала с
RS232 |
40 |
6 |
Сигнал с переключателя 1
(выбор работы с DTR) |
80 |
7 |
Вход/выход(Di/Do) данных
NvRAM |
Порты ввода/вывода в адресном
пространстве портов |
00
R/W |
1 |
0 |
? |
2 |
1 |
? |
4 |
2 |
Какой-то флажок
сихронного В/В (флажок передачи?) |
8 |
3 |
Флажок наличия символа в
синхронном приемнике |
10 |
4 |
? |
20 |
5 |
? |
40 |
6 |
Сброс Watchdog
таймера |
80 |
7 |
? |
02 |
|
|
Младшая часть делителя
скорости синхронного режима |
04 |
|
|
Старшая часть делителя
скорости синхронного режима |
06 |
|
|
Младшая часть делителя
скорости синхронного режима |
08 |
|
|
Старшая часть делителя
скорости синхронного режима |
0A |
|
|
Запись: Синхронный вывод
символа в PC Чтение: Синхронный ввод символа из
PC |
0C |
1 |
0 |
Выбор источника
синхросигнала для синхронного режима |
2 |
1 |
? |
4 |
2 |
? |
8 |
3 |
? |
10 |
4 |
? |
20 |
5 |
Замыкание цепи приема
символа на выход (аппаратное эхо) |
40 |
6 |
Что-то для синхронного
режима |
80 |
7 |
? |
0E |
|
|
Hаправление передачи
линий порта 10. 1 - вывод, 0 - ввод |
10
п о р т
д в у н
а п р а в л. |
1 |
108 |
Поднять трубку
(выход) |
2 |
208 |
Что-то для спортстера
(выход) |
4 |
408 |
Включение телефона/2
(выход) |
8 |
808 |
Что-то с готовностью PNP
(вход/выход) |
10 |
1008 |
Запись: Выход
последовательных данных PNP Чтение: Вход
последовательных данных PNP |
20 |
2008 |
Режим обмена PNP (0-ввод)
(выход) |
40 |
4008 |
Битовая синхронизация
ввода/вывода данных PNP (выход) |
80 |
8008 |
Тип аналоговой части
(вход) В зависимовти от этого бита выбирается одна из
двух линий управления первичным реле и вводится (или не
вводится) ослабление сигнала. |
12 |
1 |
109 |
Запись: Включение
телефона Чтение: Switch 3 (на Vi - Volume
down) |
2 |
209 |
Запись: not MR LED
Чтение: Switch 2 (на VI - Volume Up) |
4 |
409 |
Запись: Что-то для
германских моделей (кр. внешнего спортстера) связанное с
выполнением флеша (ATDP!) Чтение: Switch 5 (CD Type)
(на VI - питание) |
8 |
809 |
Запись: Хитрое замыкание
линии в англ. спортстере Чтение: Switch 4 (на VI
- питание) |
10 |
1009 |
Запись: Выключение
динамика Чтение: Switch 10/7 Информация из NVRam или
нет? (на VI - питание) |
20 |
2009 |
Запись: Младшая часть
громкости динамика Чтение: Switch 9 (в курьере)
(реакция на +++) (на VI - земля) |
40 |
4009 |
Запись: Старшая часть
громкости динамика Чтение: Switch 8 (Smart mode)
(на VI - земля) |
80 |
8009 |
Запись: ? Чтение:
Switch 7/10 (на VI - питание) |
14 |
1 |
10A |
Запись: not CD LED
Чтение: DTR |
2 |
20A |
Запись: not CTS LED
Чтение: Ring (0 - есть звонок) |
4 |
40A |
Запись: Линия Ring в
COM-порт Чтение: Switch 6 (на VI -
питание) |
8 |
80A |
Запись: not DSR
Чтение: Информация о типе модема (функция от
MR,AA,ARQ,HS) MR AA ARQ HS
1 1 1 1 - 1 IS EC IC ES RC
1 1 1 0 - Bit 4 1 10 01 1 0
0 1 1 0 - Bit 3 1 11 01 0 1
1 0 1 0 - Bit 2 1 01 10 1 0
1 1 0 0 - Bit 1 0 11 00 1 1
IS/ES - Internal/External Sportster
IC/EC - Internal/External Courier
RC - Rackmount modem
прочее ошибочно |
10 |
100A |
Запись: not AA LED
Чтение: Детектор напряжения в линии (0 -
присутствует) (в спортстере может отсутствовать) (на
VI - питание) |
20 |
200A |
Запись: not ARQ LED
Чтение: Что-то с MI/MIC (на VI - питание) |
40 |
400A |
Запись: not HS LED
Чтение: Клавиша Voice/DATA |
80 |
800A |
Запись: not sync-mode LED
Чтение: Сигнал CTS с ноги 1
i186 | |
Далее порты обмена с DSP:
18h:
чтение
Bit 0 ( 1): 0 - DSP готово
запись вместе с 1Ah
чтение
1Ch
Bit 0 ( 1): DSP хочет получить команду
Bit 1 ( 2): DSP хочет возвратить статус
Bit 2 ( 4): DSP хочет передать блок данных
1E
Чтение:
Bit 0 ( 1): Должен быть установлен для начала загрузки
Bit 1 ( 2): Должен быть установлен для начала/продолжения загрузки
Bit 2 ( 4): Сбрасывается DSP после исполнения команды
Запись кодов:
4 - начало загрузки
1 - перед загрузкой вторичного слова (побайтно в 48,4A,4C,4E)
2 - после загрузки вторичного слова
Запись:
40h-4Eh - Восьмибайтное слово для загрузки оверлея DSP
50h-5Eh - Второе восьмибайтовое слово для загрузки
Запись
58-5E - Регистр команд DSP:
58 - команда, остальное данные
Чтение
58-5A - Регистр ответов DSP:
58 - код ответа, остальное данные
Чтение
60-62 - регистр чтения блока информации от DSP
Порты откликаются до 80h, далее - пусто (аппаратно не подключены)
NVRAM
В ОЗУ Курьера образ nvram может находится по разным адресам.
Посему, целесообразнее использовать раскладку, используемую внутри
микросхемы nvram:
Off |
Длина |
Hазначение |
000 |
19 dup(?) |
Запакованные параметры |
013 |
51 dup(?) |
Сохранение S-регистров |
046 |
10*8 dup(?) |
Пароли. 10 штук по 8 символов |
096 |
8 dup(?) |
Пароль от AT%V=PWx |
09E |
8 dup(?) |
Пароль от AT%L=PWx |
0A6 |
4 dup(?) |
Дата прошивки |
0AE |
9 dup(?) |
Первая часть серийного номера
модема |
0B7 |
2 dup(?) |
Сохранение контрольной сумма
прошивки |
0B9 |
7*3dup(?) |
7 регистров конфигурации (ATI14) |
0CE |
8 dup(?) |
Пароль для удаленного просмотра
параметров |
0D6 |
8 dup(?) |
Пароль для удаленного конфигурирования
модема |
0DE |
31 dup(?) |
Записанная команда модема |
0FD |
10*24 dup(?) |
Область телефонов 10 штук * 24
символа |
1ED |
8 dup(?) |
Пароль введенный по AT%S= |
1F5 |
3 dup(?) |
Флажки паролей (по 4 бита на
пароль) |
1FB |
4 dup(?) |
Вторая часть серийного номера |
1FF |
1 dup(?) |
Контрольная сумма
nvram | |
Вероятно, целесообразно дать некоторые пояснения к назначению
отдельных параметров:
Запакованные параметры
Сюда сохраняются все нерегистровые параметры (типа atx?, atm? и
т.д). При этом из параметра выделяются только значащие биты и
записывается непереывной последовательностью бит.
Сохранение S-регистров
Записываются сохраняемые S-регистры. S-регистры не подлежащие
сохранению пропускаются.
Дата прошивки
При запуске теста (по кнопке) записывается дата супервизора.
Сохранение контрольной суммы прошивки
Если при запуске теста дата прошивки совпадает с сохраненной
датой прошивки, а контрольная сумма не совпадает, выдается сообщение
об ошибке.
Регистры конфигурации
Регистры, показывающие разрешенные функциональные возможности
модема. Для сохранения каждого байта используются три байта в nvram,
связанные определенной функцией. Если значения различаются, параметр
считается недостоверным (и пропускается при показе по ATI14).
Используется следующая функция:
Byte1= (code - 5) ROL 2 Byte2= (code + 15) ROR 1
Byte3= (code XOR 1Dh)
Флажки паролей
Определяют параметры каждого парольного входа по-отдельности. Hа
каждый пароль приходится по 4 бита:
1 - Account Enable 2 - Dialback 3 - New # 4 - Hе
используется
Подробнее о них можно прочитать в описании команды AT%A
Приложение A
Для особо ленивых привожу краткую информация на мелкие
микросхемы, применяемые в модеме.
NVRAM
Используются микросхемы серии 93c66 (256*16).
|______________| | | __________________
CLK______/| \|_______________|/| \_________
| |
|Tdis| Tdih | |
____ | __________ | _________________ _____________ _________________
/\ \ / valid \ /\ /\ /\ /\ /\ /\ \ / valid \ /\ /\ /\ /\ /\ /\
DI/_/ \__________/ \/_\/_\/_\/_\/_\/_/ \_____________/ \/_\/_\/_\/_\/_\/_
| |
|Tcss | | Tcsl|
|__________________________________________________________| |_
CS___/ | | |\___/
| | |
| Tpd | | Tpd | |Tcz|
__________________ | _____________________________ | _______________ |
\ / valid \ / valid \|_
DO________________/ \_____________________________/ \_______________/
Hабор команд:
Команда Старт Код операции Адрес Входные/выходные данные
бит OP1 OP2
Чтение 1 1 0 A7 A6 A5....A1 A0 D15-D0
Запись 1 0 1 A7 A6 A5....A1 A0 D15-D0 (RDY/^BSY)
Разр. записи 1 0 0 1 1 X.....X X High-Z
Запр. записи 1 0 0 0 0 X.....X X High-Z
Режим чтения:
DI 1 1 0 A7 A6 A5....A1 A0
DO D15 D14 D13 D12 ... D2 D1 D0
Режим записи:
DI 1 0 1 A7 A6 A5....A1 A0 D15 D14 D13 D12 ... D2 D1 D0
DO BSY RDY
Режим Разрешение/запрещение записи:
DI 1 0 0 1/0 1/0 X X X X
Буфера RS323
1488, 75188 - преобразователь TTL в RS232 VDD=+12, VEE=-12.
|
A |
B |
Y |
0 |
0 |
VDD |
0 |
1 |
VDD |
1 |
0 |
VDD |
1 |
1 |
VEE | |
1489, 75189 - преобразователь RS232 в TTL
ОЗУ - 62256 (32 КБ)
Приложение Б
Таблица соответствия принимаемого DTMF-сигнала и формируемого
кода.
Частота низкой
группы, Гц |
Частота высокой
группы, Гц |
Цифра |
697 |
1209 |
1 |
697 |
1336 |
2 |
697 |
1477 |
3 |
770 |
1209 |
4 |
770 |
1336 |
5 |
770 |
1477 |
6 |
852 |
1209 |
7 |
852 |
1336 |
8 |
852 |
1447 |
9 |
941 |
1209 |
* |
941 |
1336 |
0 |
941 |
1477 |
# |
697 |
1633 |
A |
770 |
1633 |
B |
852 |
1633 |
C |
941 |
1633 |
D | |
|