Это - достаточно беспорядочный архив сообщений конференций сети fidonet, которые на момент их прочтения мной
показались полезными или интересными. Многие устарели, многие узкоспецифичны и малоинтересны, но может оказаться и что-то новое...
- __techs (2:5015/42) ----------------------------------------------- __techs - Msg : 895 of 1000 From : Dmitry Romanov 2:5090/23.13 31 Dec 99 01:53:00 To : All 05 Jan 00 01:05:14 Subj : [2/2] Senao-868 FAQ ------------------------------------------------------------------------------- @AREA:SU.HARDW.PHONES Hello All! === Cut === ┌---------------------------------┐ │ Раздел 3. Железо и протоколы ;) │ └---------------------------------┘ Вид на процессорную плату Вид на RF-MODULE (TRX-CJ-1030) (SN-868 H2-x.xx) сверху: сверху (под экранирующей крышкой): │ │ │ │ │(SND)(INT)(END)│ │ │ │ │ │ │ │ 20 11 │ │ │ │ ■■■■■■■■■■ │ │ │ │ ■■■■■■■■■■ │ │ │ │ 1 10 │ │ │ │ │ │ ┌------------┤ │ (Buz) (Mic) │ │ 11│ ■ ■ ■ ■ ■ ■│1 │ │ │ 12│■ ■ ■ ■ ■ ■ │2 └---------------┘ └---------┴------------┘ A - номер контакта RF-MODULE (который в экране) B - номер контакта RF-платы (SN-868 H1-x.xx) C - направление сигнала ("<-" в RF-плату, "->" из платы) ┌--┬--┬--┬---------------------------------------------------┐ │ A│ B│ C│ Краткое описание │ ╞══╪══╪══╪═══════════════════════════════════════════════════╡ │ │ 1│<-│N/A (Speaker) │ │ │ 2│<-│N/A (Speaker) │ │ │ 3│<-│N/A (Mic) │ │ │ 4│->│N/A (RXD) │ │ │ 5│<-│N/A (TXD) │ │11│ 6│<-│RCO/ TX DATA (вход модуляции DATA & Voice) │ │ 9│ 7│<-│TX SWITCH (для защиты по VSWR ?) │ │ 7│ 8│<-│PLL DATA (послед.данные для синтезатора) │ │ 5│ 9│<-│PLL STROBE (при "0" разрешена загрузка синтезатора)│ │ 2│10│->│CARRIER SENSE ("0" - есть несущая) │ │ 1│11│->│CARRIER LEVEL (уровень несущей - аналоговый) │ │ 4│12│->│DETECTOR OUT (выход детектора DATA & Voice) │ │ 6│13│<-│PLL LOCK ("0" при работе, "1" при сканировании) │ │ 8│14│<-│PLL CLOCK (по спаду происходит запись бита) │ │10│15│<-│PA CONT TX (регулировка мощности ?) │ │12│16│--│GND (земля) │ │ │17│<-│B-CON ("0" - включение питания усилителя RF) │ │ │18│<-│ASC (регулирует выходную мощность) │ │ │19│->│RF DET (мощность TX, с детектора выхода) │ │ │20│<-│H-POWER ("0" - включение питания RF-блочка) │ └--┴--┴--┴---------------------------------------------------┘ Программирование PLL-синтезатора: 1. установить PLL STROBE в "0" - разрешение программирования 2. выдать по линии PLL DATA 21 бит данных, каждый бит защелкивается переходом линии PLL CLOCK из "1" в "0" (по спаду) 3. установить PLL STROBE в "1" - запрет программирования 4. установить линию PLL LOCK в "1" при быстром переборе каналов (сканиро- вании) или в "0" при работе на одном канале. Это что-то связано с временем установления/удержания АПЧ, подробнее спросите у радиолюбителей. В следующих версиях этого документа (как найду даташит на синтезатор) приведу полную таблицу соответствия номера канала и коэфф. деления, пока для примера: ┌------------------┬-----------------------┐ │Описание │ Данные (слева направо)│ ╞══════════════════╪═══════════════════════╡ │общий Kдел │ 111100000000001101010 │ │RX 144 │ 101000111000001001010 │ │TX 144 │ 001000111000001001010 │ │RX 154 │ 101000111000001010100 │ │RX 164 │ 101000111000001011110 │ │RX 174 │ 101000111000001101000 │ │RX 184 │ 101000111000001110010 │ │RX 194 │ 101000111000001111100 │ │RX 204 │ 101000111000010000110 │ │RX 214 │ 101000111000010010000 │ │RX 000 │ 101000110111110111010 │ │TX 000 │ 001000110111110111010 │ │RX 010 │ 101000110111111000100 │ │RX 020 │ 101000110111111001110 │ │RX 030 │ 101000110111111011000 │ │RX 040 │ 101000110111111100010 │ │RX 050 │ 101000110111111101100 │ │RX 060 │ 101000110111111110110 │ │RX 070 │ 101000111000000000000 │ │TX привязка трубы │ 001000111000010111001 │ └------------------┴-----------------------┘ Практический интерес в целях защиты от сканерщиков и помех от подобных р/телефонов представляют неиспользованные каналы (надо подобрать пары кодов для трубы и базы) - можно немного сдвинуть/изменить сетку частот или недалеко выйти за диапазон. В этом случае и в трубе и в базе в разрез STROBE, DATA, CLOCK ставится по пичке (какая-ндь дешевая из 8-ножек), которые в онлайне подставляют свои коэфф. деления вместо стандартных. Схема подключения к LPT и програмка просмотра кодов (386DX-40 minimum, no multitask): ┌-------┬--------┬------┬---------┐ │LPT pin│Port bit│RF pin│PLL Desc.│ ╞═══════╪════════╪══════╪═════════╡ │ 10 │ 6 │ 8 │ DATA │ │ 12 │ 5 │ 9 │ STROBE │ │ 15 │ 3 │ 14 │ CLOCK │ │18..25 │ │ 16 │ GND │ └-------┴--------┴------┴---------┘ uses crt; var buf: array[0..20] of byte; {массив для чтения} i: word; {счетчик цикла чтения} begin repeat repeat until (Port[$379] and 32) = 0; {ждем STROBE=0} for i:=0 to 20 do {считать 1 осциллограму - 21 бит} begin repeat until (Port[$379] and 8) = 0; {ждем CLOCK=0} buf[i]:=Port[$379]; {считать бит} repeat until (Port[$379] and 8) <> 0; {ждем CLOCK=1} end; for i:=0 to 20 do Write((buf[i] shr 6) and 1); WriteLn; repeat until (Port[$379] and 32) <> 0; {ждем STROBE=1} until false; end. Звуковой сигнал модуляции (как голос, так и кодограммы) поступает на ножку 6 (RCO/ TX DATA), выход детектора снимается с ноги 12 (DETECTOR OUT). Hикаких особенностей в RF-плате я больше не нашел. Цифровой обмен между базой и трубкой: применен протокол MSK с частотами 1200 и 2400Hz. Кроме того, при работе канал модулируется низкочастотным пилот- сигналом CTSS, частота которого зависит от ID-кода: ┌-----------┬----------┬-----------------┬---------┐ │ ID-code │ │ Base CTSS code │ Handset │ ├-----┬-----┤ CTSS, Hz ├-----┬-----┬-----┤CTSS code│ │bit 1│bit 0│ │ max │ min │ def │ │ ╞═════╪═════╪══════════╪═════╪═════╪═════╪═════════╡ │ 0 │ 0 │ 66.2 │ 7Ah │ 72h │ 76h │ 3Bh │ │ 0 │ 1 │ 72.3 │ 6Fh │ 69h │ 6Ch │ 36h │ │ 1 │ 0 │ 78.0 │ 68h │ 60h │ 64h │ 32h │ │ 1 │ 1 │ 83.0 │ 62h │ 5Ah │ 5Eh │ 2Fh │ └-----┴-----┴----------┴-----┴-----┴-----┴---------┘ Чтобы вручную не декодировать MSK, воспользуемся аудиопроцессором AK2351, который этим и занимается: нога 18 - RCLC - по фронту (в книге по спаду - ошибка) с RDATA читаем очередной бит данных нога 19 - RDATA - последовательные декодированные данные MSK Схемка подключения к LPT и програмка просмотра кодов: ┌-------┬--------┬------┬---------┐ │LPT pin│Port bit│IC pin│PLL Desc.│ ╞═══════╪════════╪══════╪═════════╡ │ 10 │ 6 │ 19 │ RDATA │ │ 12 │ 5 │ 18 │ RCLC │ │18..25 │ │ 12 │ GND │ └-------┴--------┴------┴---------┘ uses crt; var buf: array[0..2000] of byte; {массив для чтения} i,j: integer; {счетчик цикла чтения} begin for i:=0 to 2000 do begin repeat buf[i]:=Port[$379] until (buf[i] and 32) <> 0; {ждем RCLC=1} repeat until (Port[$379] and 32) = 0; {ждем RCLC=0} end; ClrScr; for j:=0 to 23 do for i:=0 to 79 do begin GotoXY(i+1,j+1); Write((buf[j*80+i] shr 6) and 1); {RDATA} end; ReadKey; end. Пример пакета данных (слева направо): 1111111111 1101 0110 0011 1101 1100 1010 0010 0010 1111 1111 1111111111 ---------┐ ┌---┬---┐ ┌---┬----┬----┬---┐ ┌--┐ ┌--┐ ┌--┐ ┌--┐ ┌--------- │ │ B │ 6 │ │ C │ B │ 3 │ 5 │ │4 │ │4 │ │F │ │F │ │ empty │ ├---┴---┤ ├---┴----┴----┴---┤ ├--┤ ├--┤ ├--┤ ├--┤ │ empty │ │prefix │ │ ID=BC53 │ │N1│ │N1│ │N0│ │N0│ │ ---------┘ └-------┘ └-----------------┘ └--┘ └--┘ └--┘ └--┘ └--------- По книге рекомендуется ID-code в диапазоне 0000..4000 за исключением 000x, x000, x555, xAAA, xFFF (помехонеустойчивые коды), но у меня проходили все значения 0000..FFFF. Префикс всегда равен 6B (у DeLuxe он программируется?). Каждый ниббл повторяется дважды. Hе забывайте, что младший значащий бит (LSB) слева на рисунке (принимается первым). Известные мне пакеты данных, посылаемые базой: ┌---------┬----┬----------------------------------------------------┐ │ N1 N0 │Byte│Description │ ╞═════════╪════╪════════════════════════════════════════════════════╡ │1100 0100│ 32 │установка связи (подтверждение) 1-й пакет │ │1011 0100│ D2 │установка связи (подтверждение) 2-й пакет │ │0110 1111│ 6F │прекращение связи (подтверждение) │ │1100 0000│ 30 │прекращение связи (запрос) │ ├---------┼----┼----------------------------------------------------┤ │0010 1000│ 41 │вызов Intercom for HS=1 │ │0010 0100│ 42 │вызов Intercom for HS=2 │ │0010 1100│ 43 │вызов Intercom for HS=3 │ │0010 0010│ 44 │вызов Intercom for HS=4 │ │0010 1010│ 45 │вызов Intercom for HS=5 │ │0010 0110│ 46 │вызов Intercom for HS=6 │ │0010 1110│ 47 │вызов Intercom for HS=7 │ │0010 0001│ 48 │вызов Intercom for HS=8 │ │0010 1001│ 49 │вызов Intercom for HS=9 │ │0010 1111│ 4F │вызов Intercom for HS=0 (undefined = all) │ ├---------┼----┼----------------------------------------------------┤ │0011 1000│ B1 │Ring for HS=1 │ │0011 0100│ B2 │Ring for HS=2 │ │0011 1100│ B3 │Ring for HS=3 │ │0011 0010│ B4 │Ring for HS=4 │ │0011 1010│ B5 │Ring for HS=5 │ │0011 0110│ B6 │Ring for HS=6 │ │0011 1110│ B7 │Ring for HS=7 │ │0011 0001│ B8 │Ring for HS=8 │ │0011 1001│ B9 │Ring for HS=9 │ │0011 1111│ BF │Ring for HS=0 (all) │ ├---------┼----┼----------------------------------------------------┤ │0001 1000│ 81 │набор цифры 1 (подтверждение) │ │0000 0100│ 02 │набор цифры 2 (подтверждение) │ │0001 1100│ 83 │набор цифры 3 (подтверждение) │ │0000 0010│ 04 │набор цифры 4 (подтверждение) │ │0001 1010│ 85 │набор цифры 5 (подтверждение) │ │0000 0110│ 06 │набор цифры 6 (подтверждение) │ │0001 1110│ 87 │набор цифры 7 (подтверждение) │ │0000 0001│ 08 │набор цифры 8 (подтверждение) │ │0001 1001│ 89 │набор цифры 9 (подтверждение) │ │0000 0101│ 0A │набор цифры * (подтверждение) │ │0001 0000│ 80 │набор цифры 0 (подтверждение) │ │0000 1101│ 0B │набор цифры # (подтверждение) │ └---------┴----┴----------------------------------------------------┘ Следующая програмка поможет автоматизировать распознавание пакетов данных (схема подключения как у предыдущей, тестировалась на на Pentium-200): uses crt; const ID: array[0..23] of byte = ( 64,64,00,64,00,64,64,00, {prefix} 00,00,64,64,64,64,00,64,64,64,00,00,64,00,64,00); {ваш ID-code побитно} var n: integer; b: byte; begin clrscr; repeat n:=0; {ловим ID} repeat repeat b:=Port[$379] until (b and 32) <> 0; {ждем RCLC=1} if ((b xor ID[n]) and 64) =0 then Inc(n) else n:=0; repeat until (Port[$379] and 32) = 0; {ждем RCLC=0} until n=24; for n:=0 to 15 do {выводим 16 бит} begin repeat b:=Port[$379] until (b and 32) <> 0; {ждем RCLC=1} Write((b shr 6) and 1); {RDATA} repeat until (Port[$379] and 32) = 0; {ждем RCLC=0} end; WriteLn; until false; end. Hу и напоследок програмка протоколирования ствола: uses crt; const HEXCHAR: array[0..15] of char = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); var b: byte; {считанный байт с порта} prefix: word; {prefix} id: word; {ID-code} n0,n1: byte; {2 нибла с повторами} begin ClrScr; repeat repeat b:=Port[$379] until (b and 32)<>0; {ждем RCLC=1} asm rcl b,1 {сдвинуть RDATA в CARRY FLAG} rcl b,1 rcr n0,1 {все 6 байт сдвинуть влево через CARRY FLAG} rcr n1,1 rcr id,1 rcr prefix,1 end; if (prefix=$6BFF) and {предварительное FF для помехоустойчивости } ((n1 and $0F)=((n1 shr 4) and $0F)) and {сравнить нибл 1 с повтором} ((n0 and $0F)=((n0 shr 4) and $0F)) {сравнить нибл 0 с повтором} then WriteLn('ID: ', HEXCHAR[(id shr 04) and $0F], HEXCHAR[(id shr 00) and $0F], HEXCHAR[(id shr 12) and $0F], HEXCHAR[(id shr 08) and $0F], ' Event: ',HEXCHAR[n1 and $0F], HEXCHAR[n0 and $0F]); repeat until (Port[$379] and 32) = 0; {ждем RCLC=0} until false; end. === Cut === /Dmitry/ --- GoldED 3.00.Beta5+ * Origin: #Ремонтидиагностикаэлектроникиавтомобилей# (2:5090/23.13)