
Адптация прошивок
Часть 1. Введение
Часть 2. Определение сигналов
Часть 3. Параметры набора пульсом
Часть 4. Регулировка уровня выходного сигнала
Введение
Вы конечно знаете про "адаптированные" прошивки и модификацию
ОЗУ. В последнее время приходит много вопросов, почему те или иные изменения
не дают эффекта. В этом разделе я планирую подробно осветить технологию
адаптации прошивок и ОЗУ. Сначала обсудим изменение прошивок. Надо признать,
что фирма "Rockwell" значительно облегчила процесс адаптации.
В прошивке все параметры определяющие особенности страны сгруппированы
в одном месте. Этот участок кода, длиной до 272 байт будем называть country-блок.
Вот пример такого блока:
00000000: 16 55 53 20 30 31 31 C2
- 08 7C EE C2 08 74 C7 FE
00000010: 74 C2 08 84 11 C2 08 4F - CD 95 64 00 FF 00 05 00
00000020: 02 C2 08 7C EE C2 08 74 - C7 FE 74 C2 08 84 11 C2
00000030: 08 4F CD 95 64 00 FF 00 - 05 0D 16 C3 1B C1 15 63
00000040: 1B 0A 42 00 0E 00 13 03 - 01 2A 00 3A 00 2A 00 3A
00000050: 00 04 5A 00 2C 01 22 01 - CC 01 01 16 00 1C 00 16
00000060: 00 1C 00 04 00 00 00 00 - 00 00 00 00 01 00 00 00
00000070: 00 00 00 00 00 01 00 00 - 00 00 00 00 00 00 01 00
00000080: 00 00 00 00 00 00 00 01 - 00 00 00 00 00 00 00 00
00000090: 01 00 00 00 00 00 00 00 - 00 01 00 00 00 00 00 00
000000A0: 00 00 01 00 00 00 05 26 - 4B 00 4B 48 08 09 08 48
000000B0: 48 53 CB DB A2 82 32 DD - 00 AD 00 4B 2C 01 00 00
000000C0: 00 00 00 00 14 05 00 00 - 05 00 78 00 00 00 00 00
000000D0: 00 00 00 00 20 1C 01 00 - 07 00 00 00 83 11 40 00
000000E0: 00 FF 00 06 02 FF 02 07 - 01 FF 32 08 02 FF 02 09
000000F0: 01 FF 06 0A 00 FF 0E 0B - 32 FF 5F 1B FF 00 49 1D
00000100: 46 46 46 5B 08 0F 0A 5C - 0A 0F 0A FF FF FF FF FF
Здесь оригинальный файл 022_usa.bin.
С первого взгляда трудно разобраться в этом нагромождении чисел. Но если
взглянуть на исходный код, то ситуация проясняется.
COUNTRY PARAMETERS FOR US |
?CCODE: |
DB |
22 |
; Country code |
?INTER: |
DB |
'US ' |
; International code |
?INTCODE: |
DB |
'011' |
; International access
dial code |
?TONEA: |
|
|
; Parameters used to
setup toneA filter |
|
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW |
$08C2
$EE7C
$08C2
$C774
$74FE
$08C2
$1184
$08C2
$CD4F
$6495 |
; A3 Biquad1
; A2 Biquad1
; A1 Biquad1
; B2 Biquad1
; B1 Biquad1
; A3 Biquad2
; A2 Biquad2
; A1 Biquad2
; B2 Biquad2
; B1 Biquad2 |
?DAGCRF: |
DW |
$FF00 |
; DAGCRF
;DP Default values + old comments to refer
; -32dBm (required) + line interface |
?DIALT_THRESH: |
DW |
$0500 |
;DP default value of
THRESHU
; -43dBm (required) + line interface |
?PROG_THRESH: |
DW |
$0200 |
;DPL practical value
of THRESHU |
?ALTTONE: |
|
|
; Parameters used for
alt setup of toneA |
|
DW
DW
DW
DW
DW
DW
DW
DW
DW
DW |
$08C2
$EE7C
$08C2
$C774
$74FE
$08C2
$1184
$08C2
$CD4F
$6495 |
; A3 Biquad1
; A2 Biquad1
; A1 Biquad1
; B2 Biquad1
; B1 Biquad1
; A3 Biquad2
; A2 Biquad2
; A1 Biquad2
; B2 Biquad2
; B1 Biquad2 |
?ALT_DAGCRF:
?ALT_DIALT_THRESH: |
DW
DW |
$FF00
$0500 |
; DAGCRF
;DP default value of THRESHU |
?LOW_DIALLEVEL:
?HIGH_DIALLEVEL: |
DW
DW |
$160D
$1BC3 |
; Default for VFC and
-6 and -4 dbm
; DPL |
?LOW_DIALLEVEL_SPK:
?HIGH_DIALLEVEL_SPK: |
DW
DW |
$15C1
$1B63 |
; Speakerphone default:
-6 dbm
; Speakerphone default: -4 dbm |
?ANSWERSTABLE: |
DB |
10 |
; *10ms, Min. answer
tone stable time |
; RINGMIN: Period (in ms) for min FREQ ring (ie max
period) |
?RINGMIN: |
DW |
42H |
; Value for min ring
freq detection (15Hz) |
; RINGMAX: Period (in ms) for max FREQ ring (ie min
period) |
?RINGMAX: |
DW |
0EH |
; Value for max ring
freq detection (68Hz) |
?RING_LIMIT: |
DB |
19 |
; No of 10 ms UNITS
required to validate ring |
?NUMBER_OF_TONES_22: |
DB |
3 |
|
?NUMBER_OF_PHASES_22: |
DB |
1 |
|
|
;CAD_TABLE_22: |
|
?MIN_BUSY_ON_PH1_22:
?MAX_BUSY_ON_PH1_22:
?MIN_BUSY_OFF_PH1_22:
?MAX_BUSY_OFF_PH1_22:
?NUM_BUSY_CYC_PH1_22: |
DW
DW
DW
DW
DB |
42
58
42
58
4 |
;+-15% |
|
?MIN_RINGBACK_ON_PH1_22:
?MAX_RINGBACK_ON_PH1_22:
?MIN_RINGBACK_OFF_PH1_22:
?MAX_RINGBACK_OFF_PH1_22:
?NUM_RINGBACK_CYC_PH1_22: |
DW
DW
DW
DW
DB |
90
300
290
460
1 |
|
|
?MIN_CONGEST_ON_PH1_22:
?MAX_CONGEST_ON_PH1_22:
?MIN_CONGEST_OFF_PH1_22:
?MAX_CONGEST_OFF_PH1_22:
?NUM_CONGEST_CYC_PH1_22: |
DW
DW
DW
DW
DB |
22
28
22
28
4 |
;Used for detection
of fast busy |
|
?MIN_DIALTONE1_ON_PH1_22:
?MAX_DIALTONE1_ON_PH1_22:
?MIN_DIALTONE1_OFF_PH1_22:
?MAX_DIALTONE1_OFF_PH1_22:
?NUM_DIALTONE1_CYC_PH1_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
|
?MIN_DIALTONE2_ON_PH1_22:
?MAX_DIALTONE2_ON_PH1_22:
?MIN_DIALTONE2_OFF_PH1_22:
?MAX_DIALTONE2_OFF_PH1_22:
?NUM_DIALTONE2_CYC_PH1_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
; PHASE 2 |
?MIN_BUSY_ON_PH2_22:
?MAX_BUSY_ON_PH2_22:
?MIN_BUSY_OFF_PH2_22:
?MAX_BUSY_OFF_PH2_22:
?NUM_BUSY_CYC_PH2_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
|
?MIN_RINGBACK_ON_PH2_22:
?MAX_RINGBACK_ON_PH2_22:
?MIN_RINGBACK_OFF_PH2_22:
?MAX_RINGBACK_OFF_PH2_22:
?NUM_RINGBACK_CYC_PH2_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
|
?MIN_CONGEST_ON_PH2_22:
?MAX_CONGEST_ON_PH2_22:
?MIN_CONGEST_OFF_PH2_22:
?MAX_CONGEST_OFF_PH2_22:
?NUM_CONGEST_CYC_PH2_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
|
?MIN_DIALTONE1_ON_PH2_22:
?MAX_DIALTONE1_ON_PH2_22:
?MIN_DIALTONE1_OFF_PH2_22:
?MAX_DIALTONE1_OFF_PH2_22:
?NUM_DIALTONE1_CYC_PH2_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
|
?MIN_DIALTONE2_ON_PH2_22:
?MAX_DIALTONE2_ON_PH2_22:
?MIN_DIALTONE2_OFF_PH2_22:
?MAX_DIALTONE2_OFF_PH2_22:
?NUM_DIALTONE2_CYC_PH2_22: |
DW
DW
DW
DW
DB |
0
0
0
0
1 |
|
?CAD_DEB: |
DB |
0 |
|
|
|
; Make-Break nominal value: 39-61 |
?PULSE_MAKE_OFFSET: |
DB |
0 |
; Pulse make offset
(0 -> 39) |
?PULSE_BREAK_OFFSET: |
DB |
0 |
; Pulse break offset
(0 -> 61) |
?PULSESETUP: |
DB |
5 |
; Pulse dial setup
time |
?PULSECLEAR: |
DB |
5+33 |
; Pulse dial clear
time + last make pulse |
?PULSEINTERD: |
DB |
75 |
; Pulse dial interdigit
time |
?DIALCODE: |
DB |
0 |
; Dial Pulse code
CODE |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
0 |
1 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
10 |
2 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
1 |
|
;0= ~offhook, 1=~pulse, 4=callid, 5=voice
;ACFSP use low active of PE1 (bit1) as voice relay instead of bit5
;Thus, bit1 must be reset (low active) if bit5 is set (high active) |
; For ACFSP |
Bit 0 = Off hook (active low)
Bit 1 = Voice (active low)
Bit 2 = unused
Bit 3 = unused
Bit 4 = Caller ID (active high)
Bit 5 = unused
Bit 6 = Pulse (NVM_DATA) (active low)
Bit 7 = unused |
?ONHKCODE: |
DB |
43H |
;Hook open,Voice open,CID
open,Pulse open |
?OFFHKCODE: |
DB |
40H |
;Hook closed,Voice
closed,CID open,Pulse open |
?MAKECODE: |
DB |
00H |
;Hook closed, Voice
closed,CID open,Pulse closed |
?BRKCODE: |
DB |
01H |
;Hook open, Voice closed,
CID open,Pulse closed |
?SETCODE: |
DB |
00H |
;Hook closed, Voice
closed,CID open,Pulse closed |
?CLRCODE: |
DB |
40H |
;Hook closed, Voice
closed, CID open,Pulse open |
?VON_OFFHKCODE: |
DB |
40H |
;Hook closed, Voice
closed, CID open,Pulse open |
?CIDONCODE: |
DB |
53H |
;Hook open, Voice open,
CID closed,Pulse open |
;******** THE BELOW 3/6 RELAYS SETTINGS ARE FOR VOICEVIEW
DAA ONLY ********
;-- Three/Six Relay settings :
;-- bit 7 specifies the number of valid relays
;-- Three: bit 7 = 1 1XXXxxxX
;-- bit 0=~offhook, 4=callid, 5=voice
;-- For Voice View:
;-- bit 6 specifies the ordering of relays
;-- 6 = 0 -> relay bit order 4,0,5
;-- 6 = 1 -> relay bit order 4,5,0 with 10-50ms wait between 5 and
0
;-- other bits are consistent with previous codes.
;-- Six: bit 7 = 0 0XXXXXXX
;-- bit 0=~offhook, 1=~pulse, 2=RLY3, 3=RLY4, 4=callid, 5=voice
;-- For Voice View:
;-- bit 6 specifies the ordering of relays
;-- 6 = 0 -> relay bit order 1,2,3,4,0,5
;-- 6 = 1 -> relay bit order 1,2,3,4,5,0 with 10-50ms wait between
5 and 0 |
?ONHK_36: |
DB |
CBH |
; 3 relay on hook action |
?CID_36: |
DB |
DBH |
; 3 relay on hook,
CID |
?OFFHK_36: |
DB |
A2H |
; 3 relay off hook,
VOICE (mute handset) |
?HANDSETOFF_36: |
DB |
82H |
; off hook (keep handset
unmute while offhook) |
?EARTH_DURATION: |
DB |
50 |
; Delay for earth relay
to be set (500mS) |
?TONEONTIME: |
DW |
DDH |
; DTMF tone on time |
?TONEINTERD: |
DW |
ADH |
; DTMF tone interdigit
time |
?DIALSTABLE: |
DB |
75 |
; 0.75s, Min. time
for dial tone to be present
; So, with typical S6=2 we have 1.25secs to
; debounce dialtone! |
?W_DIALSTABLE: |
DW |
300 |
; 3 seconds to make
sure we don't detect
; ringback as a dial tone |
|
?NODIALTONE:
?NUMBER_BUSY:
?RING_TIMEOUT:
?ANSWER_TIMEOUT:
?VOICEANSWER:
?KEY_ABORT |
DB
DB
DB
DB
DB
DB |
0H
0H
0H
0H
0H
0H |
; Selected by Rockwell
; Selected by Rockwell
; Selected by Rockwell
; Selected by Rockwell
; Selected by Rockwell
; Selected by Rockwell |
|
?OGM_DELAY: |
DB |
20 |
; Out Going Msg delay
timer (x10ms) |
|
?MININTERDLY: |
DB |
5 |
; Min. time to delay
beween calls |
?BLCOLDELAY: |
DW |
0 |
; |
?BLDELAY1:
?BLDELAY2:
?BLDELAY3:
?BLDELAY4:
?BLDELAY5:
?BLDELAY6: |
DW
DW
DW
DW
DW
DW |
5
120
0
0
0
0 |
; Delay time #1
; Delay time #2
; Delay time #3
; Delay time #4
; Delay time #5
; Delay time #6 |
?BLFINALDELAY: |
DW |
7200 |
; Final delay time |
?DELAY1COUNT: |
DB |
1 |
; Number of tries delay
#1 |
?MAXCOLTRIES: |
DB |
0 |
; Max consecutive number
no dial tone |
?MAXTRIES: |
DB |
7 |
; Max. number of tries |
?MAXTRIES_2: |
DB |
0 |
; Blacklisting added |
; The following byte adjust the preferred tx lvl
in the S-registers.
; TLVLADJ, which is in a 2's complement form, adjusts the tx lvl in
; decrement or increment of 1dB. For example, TLVLADJ=02 means that the
; actual transmit level output of the DP will be 2 dB less than the S91
; value (Usually, this is used to compensate for a DAA that has 2dB
; gain); and if S91=10, the actual output from the DP will be
; 10+02=12 (-12 dBm). Another example, if TLVLADJ=FE and S91=10, the
; actual transmit level output of the DP will be 10-02=8 (-8 dBm). |
?TLVLADJ: |
DB |
0 |
; TLVL register adjustment |
; The following two bytes adjust the transmit level
inside the DSP (before D/A
; converter), and can be used for fine tuning the transmit level.
; note that the parameter Hex value has to be calculated from the formula
; defined in the RC96DP(L) Modem Designer's Guide Function No 12.
; Also note that the TX_DIGITAL_OFFSET works only for non-FSK modes.
For
; FSK modes the parameter FSK_TX_DIG_OFFSET is used, and follows a different
; (and undocumented) formula than the TX_DIGITAL_OFFSET. |
.IF |
DPConfig=DPL |
?TX_DIGITAL_OFFSET: |
DW |
$43CB |
; +0.5 dB offset on
transmit level |
?FSK_TX_DIG_OFFSET: |
DW |
$0040 |
|
.ENDIF |
|
|
|
; The Extended RTH bit (XRTH) controls the reduction
of RLSD by approximatively
; 5 dB. The amount of threshold reduction (offset) is useful for compensating
; for any loss or gain that may be introduced by the DAA/hybrid used.
; Following are results with differents offset values
XRTH_OFFSET |
OFF |
ON |
9 |
-44,4 |
-41,2 |
5 |
-46 |
-42,9 |
0 default value (no
offset) |
-47,4 |
-44,7 |
FD |
-48,6 |
-45,9 |
FA |
-49,9 |
-46,8 |
|
.IF |
(DPConfig=V34) |
?XRTH_OFFSET: |
DB |
0 |
|
.IF(SVDConfig=DSVD).OR.(SVDConfig=BothDSVD) |
; If DSVD |
?DSVD_Tone_Level: |
DB |
06H |
|
.ENDIF |
; END DSVD |
.ENDIF |
|
?CTRY_FLAG1_PRM: |
DB |
10000011B |
;Option_flag 1
;bit 0 BLINDDIALENA Blind Dialing is permitted
;bit 1 ADAPTDIAL Enable Adaptive Dialing
;bit 2 GRNDENA Enables Earth Relay
;bit 3 unused
;bit 4 LINESENSE Enables line current sense 5.6.2
;bit 5 ALTDIALTONE Use the Alternate filter for Dial Tone
;bit 6 CALLTENABLE Enables the calling tone
;bit 7 CallID_Enable Enable Caller ID |
?CTRY_FLAG2_PRM: |
DB |
00010001B |
;Option_flag 2
;bit 0 BLACKDISABLE Disables all Blacklisting
;bit 1 BLCLRIFANY Clear whole BL if any number succeeds
;bit 2 GUARD1800ENA Enforces the 1800 Hz guard tone
;bit 3 FRANCE_ANSWER Detection of tone and silence
;bit 4 CHECK_&P If it is set then check the &P command
;bit 5 V23_DISABLED Disables V23 answer automode
;bit 6 PTT_STRAP_ENA Enables monitoring of PTT strap
;bit 7 NO_LINE_REV_CHK If set, don't check for line reversal |
?CTRY_FLAG3_PRM: |
DB |
01000000B |
;Option_flag 3
;bit 0 ATH1_DISABLED Disable ATH1
;bit 1 NO_PULSE_AFTER_TONE Disable ATDTxxPyy
;bit 2 NO_PULSE_DIALING Disables pulse dialing
;bit 3 NO_ABCD Disables DTMF A,B,C,D digits
;bit 4 CCT_FAX Sends CCT fax header
;bit 5 unused
;bit 6 ATX_DISABLE_BUSY ATX0 or X1 or X2 disable busy
;bit 7 SWISS_BUSY_WA Enables Swiss Busy workaround |
?S_REG: |
;Up to 12 registers can be limited |
|
DB
DB
DB
DB |
0
0
255
0 |
;0<=S0<=255
default=0 |
|
DB
DB
DB
DB |
6
2
255
2 |
;2<=S6<=255
default=2 |
|
DB
DB
DB
DB |
7
1
255
50 |
;1<=S7<=255
default=50 |
|
DB
DB
DB
DB |
8
2
255
2 |
;2<=S8<=255
default=2 |
|
DB
DB
DB
DB |
9
1
255
6 |
;1<=S9<=255
default=6 |
|
DB
DB
DB
DB |
10
0
255
14 |
;0<=S10<=255
default=14 |
|
DB
DB
DB
DB |
11
50
255
95 |
;1<=S11<=255
default=95 |
|
DB
DB
DB
DB |
27
255
0
73 |
; S27= 01001001B, US
w/EC |
|
DB
DB
DB
DB |
29
70
70
70 |
; S29=70 fixed |
|
DB
DB
DB
DB |
91
10
15
10 |
;10<=S91<=15
default=10 |
|
DB
DB
DB
DB |
92
10
15
10 |
;10<=S92<=15
default=10 |
|
DB
DB
DB
DB |
$FF
$FF
$FF
$FF |
;Available |
|
DB |
$FF |
;Flag end of table |
В этой статье я уделю внимание нескольким параметрам, которые позволяют
адаптировать прошивки для USA к нашим условиям.
Когда будет определено, какие байты нужно изменить, проводится корректировка
прошивки, а точнее ее country-блока. Этих блоков может быть несколько,
причем это может быть как несколько разных стран, так и одна и та же, но
многократно повторенная. В последнем случае изменения надо производить
в первом country-блоке.
Внимание! Я снимаю с себя ответственность за неполадки,
которые могут произойти если Вы будете записывать измененные Вами прошивки
в ПЗУ модема. Вся ответственность за возможную последующую неработоспособность
модема лежит целиком на Вас. Правда модем вряд ли испортится окончательно,
но возможно потребуется участие программатора. Обязательно делайте резервную
копию оригинальной прошивки.
Вообще модификация прошивки рекомендуется только опытным пользователям.
Для большинства я рекомендую метод модификации ОЗУ. Хотя он не дает возможности
коррекции некотрых параметров, он абсолютно безопасен. Крайней мерой для
"лечения" возможных проблем будет перезагрузка модема. Конечно,
этот метод применим только к прошивкам поддерживающим команду "AT!".
Подробнее об этой команде читайте в разделе "Busy/Изменение ОЗУ".
Используя эту команду можно получить дамп ОЗУ, а в нем найти участок
подобный приведенному ниже.
00000000: 16 55 53 20 30 31 31 C2 -
08 7C EE C2 08 74 C7 FE
00000010: 74 C2 08 84 11 C2 08 4F - CD 95 64 00 FF 00 05 00
00000020: 02 C2 08 7C EE C2 08 74 - C7 FE 74 C2 08 84 11 C2
00000030: 08 4F CD 95 64 00 FF 00 - 05 0D 16 C3 1B 0A 42 00
00000040: 0E 00 13 03 01 2A 00 3A - 00 2A 00 3A 00 04 5A 00
00000050: 2C 01 22 01 CC 01 01 16 - 00 1C 00 16 00 1C 00 04
00000060: 00 00 00 00 00 00 00 00 - 01 00 00 00 00 00 00 00
00000070: 00 01 00 00 00 00 00 00 - 00 00 01 00 00 00 00 00
00000080: 00 00 00 01 00 00 00 00 - 00 00 00 00 01 00 00 00
00000090: 00 00 00 00 00 01 00 00 - 00 00 00 00 00 00 01 00
000000A0: 00 00 05 05 4B 00 0B 02 - 02 03 02 02 1B CB DB A2
000000B0: 82 32 DD 00 AD 00 4B 2C - 01 00 00 00 00 00 00 05
000000C0: 00 00 05 00 78 00 00 00 - 00 00 00 00 00 00 20 1C
000000D0: 01 00 07 00 00 00 00 13 - 14 22 E7 A1 C2 05 00 08
000000E0: 03 42 44 C1 1E 10 50 20 - 06 80 2A 61 81 28 20 08
000000F0: 2A 27 7A 16 97 C3 41 62 - 90 1A 01 20 88 0C 82 45
00000100: 10 14 10 C4 40 0A 73 3A - EA 04 54 84 00 C6 00 06
Этот код очень похож на приведенный в начале этого раздела (он пока
не соответствует полностью, по некотрым причинам, участку прошивки, но
это не мешает заметить, что в ОЗУ есть те же параметры, что и в прошивке).
Но начиная с некотрого адреса (кстати адреса здесь не соответствуют реальным)
начинаются различия, и не все параметры доступные для изменения в прошивке
можно менять в ОЗУ. В этом состоит одно из ограничений данного метода,
второе ограничение заключается в том, что после использования команды "AT!"
нельзя инициализировать модем командой "ATZ". Если говорить подробнее
о первом ограничении, то через метод модификации ОЗУ нельзя поменять опции
стран (параметры CTRY_FLAGx_PRM)
и диапазоны изменения регистров. Так нельзя будет включить набор пульсом
и расширить пределы регулировки регистра S91.
Определение сигналов
Для тех, кто чуствует уверенность в своих знаниях английского языка и
электроники советую прочитать документ 1081r1.pdf. Ниже изложен материал
адаптированный для широкого круга читателей и возможно содержащий неточности.
В модеме определение сигналов (BUSY, DIALTONE...) происходит примерно
следующим образом. Сигнал от АТС в модеме попадает в цифровой фильтр. В
нем диапазон частот, в котором ожидается появление сигнала усиливается
в большей степени, а остальные в меньшей степени. Затем сигнал с фильтра
поступает на детектор уровня, в котором уровень сигнала сравнивается с
порогом переключения. В случае превышения порога на выходе детектора тона
(фильтр+детектор уровня) появляется логический сигнал о наличии сигнала.
Формируемая этим сигналом временная диаграмма сравнивается с заданной и
на этом основании делается вывод о наличии или от сутствии сигнала заданной
частоты, уровня и временных параметров. Все эти переменные можно менять
в country-блоке.
Начнем с параметров цифрового фильтра, их 10: A31, A21, A11, B21, B11,
A32, A22, A12, B22, B12 (второй индекс показывает к какому Biquad относится
параметр). Именно в этом порядке параметры записаны в country-блоке. При
этом следует помнить, что в каждом слове байты перевернуты и сначала идет
младший байт, затем старший. Изменяя параметры фильтра можно с помощью
программы Biquad рассчитать характеристики
фильтра. В частности нас интересует АЧХ. Следует таким образом подобрать
параметры, чтобы максимум АЧХ приходился на наиболее вероятную частоту.
При работе с программой Biquad удобно использовать файлы в формате "bqd".
Например сочетание параметров для US в файле будет выглядеть так.
;; #fs 7200Hz Sampling Rate
DW $08C2 ; A3 BQD 1
DW $EE7C ; A2 BQD 1
DW $08C2 ; A1 BQD 1
DW $C774 ; B2 BQD 1
DW $74FE ; B1 BQD 1
DW $08C2 ; A3 BQD 2
DW $1184 ; A2 BQD 2
DW $08C2 ; A1 BQD 2
DW $CD4F ; B2 BQD 2
DW $6495 ; B1 BQD 2
Параметр DIALT_THRESH определяет порог переключения фильтра при определении
сигнала DIALTONE, PROG_THRESH соответственно для остальных сигналов. Приближенная
зависимость уровня, при котором происходит переключение детектора тона
от порога при частоте 500Гц представлена в таблице.
THRESHU (Hex) |
Tone Level Detected (dBm) |
1100 |
-29 |
0C00 |
-32 |
0880 |
-35 |
0600 |
-38 |
В country-блоке задается только THRESHU, т.е. верхний порог переключения. Параметр THRESHL определяющий нижний порог
не задается и предположительно задается смещением относительно верхнего
порога. Так или иначе стандартное значение THRESHU=$0500
очень часто не обеспечивает устойчивого определения
сигнала "Busy". Более устойчивое определение происходит при значении
$0900 или больше. Эти два параметра подбираются опытным путем.
Последний этап - построение временной диаграммы. В разделе CAD_TABLE задается минимальное (максимальное)
время нахождения сигнала в состоянии включено (выключено) в секундах умноженных
на 100. Т.е. если задается интервал 0,4сек, то ему соответствует число
40 или 28h.
Ниже приведены сигналы АТС в соответствии с ГОСТ' ом.
Название |
Экс-СССР |
США |
|
|
Частоты |
Длительность |
Пауза |
Частоты |
Длительность |
Пауза |
Ответ станции
Dialtone |
425 ±25 |
Непрерывный |
350&440 |
Непрерывный |
Занято
Busy |
425±25 |
0,3...0,4 |
0,3...0,4 |
480&620 |
0,5 |
0,5 |
Контроль посылки вызова
Ringback |
425±25 |
0,8 или 1
±0,1 |
3,2 или 4
±0,3 |
440&480 |
2 |
4 |
Занято при перегрузке
Toll congestion |
425±25 |
0,15..0,2 |
0,15..0,2 |
440&480 |
0,2 |
0,3 |
Hедоступность
No such number |
950±50
1400±50
1800±50 |
3x0,33
±0,07 |
1±0,25 |
200;400 |
2х1 |
нет |
Но поскольку за соблюдением стандарта никто не следит, АТС модет передавать
сигнал Busy с частотой 300 или, скажем, 700Гц. Для того, чтобы модем правильно
определял этот сигнал нужно произвести адаптацию прошивки в следующей последовательности:
- определить частоты и временные параметры сигналов
- изменить временные параметры, взяв их с некотрым запасом
- подобрать параметры фильтра, обеспечивающие максимум АЧХ в области
требуемых частот
- подобрать пороги переключения детектора тона
Параметры набора пульсом
Набор пульсом определяют три основных параметра:
- скорость, т.е. число замыканий в секунду;
- соотношение Make/Break, т.е. соотношение времени замыкания к времени
размыкания (обычно выражается в процентах, например Make/Break=39%-61%);
- пауза между цифрами
Сначала рассмотрим соотношение Make/Break. В прошивке задаются два числа
: PULSE_MAKE_OFFSET и PULSE_BREAK_OFFSET,
которые являются смещениями в мс относительно значений принимаемых
по умлочанию. То есть если по умолчанию принимается соотношение 39%-61%
и скорость набора 10 замыканий в секунду, то время замыкания 39 мс, а время
размыкания 61 мс. Смещения могут быть положительными и отрицательными.
Таким образом регулируется одновременно и скорость набора и соотношение
Make/Break.
Межцифренная пауза задается в мс параметром PULSEINTERD.
Существуют еще два дополнительных параметра: PULSESETUP PULSECLEAR определяющие задержки в мс
до и после набора каждой цифры.
Регулировка уровня выходного сигнала
Идея метода принадлежит Ilya
Berdenikov
Этот способ имеет смысл применять только для модификации ОЗУ. Параметр
TLVADJ задает смещение от уровня выходного сигнала, заданного в регистре
S91. Положительные значения дают как бы увеличение регистра S91 и понижение
уровня выходного сигнала, отрицательные наоборот. Следует напомнить, что
отрицательные числа равны разнице между 256 и заданным значением. Т.е если
вы параметр TLVADJ приравняете 254 (FE hex), то значение регистра будет
уменьшено на 256-254=2 единицы. Стоит отметить, что сам регистр S91 не
меняется, но уровень выходного сигнала меняется.
Исключение 5-ти секундной задержки между наборами
номера
В прошивке модема задается минимальная пауза между наборами номера. Т.е.
если вы набрали номер и получили ответ (например, "BUSY"), то
следующий раз номер может быть набран не раньше чем через 5 секунд. Это
необходимо для того, чтобы аппаратура АТС смогла воспринять следующий набор
номера. Эту задержку можно отменить, если приравнять параметрMININTERDLY
к нулю.
Продолжение следует...
|