================================================================= COLUMNS ================================================================= Host net 508, Node:508/4 Tel. int+55 421284 Ignaat Simons Chopinlaan 3 7333GA Apeldoorn Netherlands HAYES modems and compatables. 1. Introduction. In the world of modem freaks and slowly on in the industrial world, the HAYES modem is a defacto standard. The official standards like RS232c (USA) and V24/V28 (CCITT) describe the Physical part of a data circuit, while the V25 (CCITT) describes the A(uto) C(call) U(unit) function. The speeds and usage of the modems are laid down by the CCITT V- standards, mainly in the V21 till V36 books. Due to the different country and telephone company laws, modems are different and not compatable with each other, exept modems of one vendor. Some years ago, it was very unwise to make a connection with two different modems, even if they claimed to be according a V-xx norm. Mostly this was no problem, because a data transport was mainly between two predefined points via a leased line or switched network. The connection was buildup manual, or made automatic via autocall function ACU (V25/RS232). The HAYES-300 modem (I think this was the start), besides the Physical RS232/V24/V28 norm did specify the modem control command level between modem and terminal via the AT leadin and the +++ command to return from a data state to the command state. Also it describes the handling of automatic speed detection. This command set enables operators and application programmers to buildup a connection via normal conversation. As it could be programmed, the connection via a switched network was possible automatical via simple statements like "CALL John". The original HAYES-300 was not using call procedures like 108/1 or 108/2 (DTR circuit). With the HAYES-1200, this command set was extended to cope with more than one line speed, the BELL 103 and BELL 212A. The last one more or less compatable with the CCITT V22 norm. Also the automatic speed selection in 'answering' mode was build in. With the HAYES- 2400, the set was dramatically extended with three speeds, BELL-103, BELL-212A and the CCITT V22 and V22bis norms. So handling also in 'answering' mode an automatic selection. As the BELL-212A and V22 uses a PSK (four-level phase shift keying) and V22bis uses QAM (Quadrature Amplitude Modulation) technic, which were designed for synchronous modems, the HAYES-modem translates the asynchrone data into a synchronous way by inserting and consequently removing a STOP bit in periods where no character is send. The HAYES- 1200 is not compatible with the BELL-212A/V22 synchronous modems. The HAYES-2400 is also in this aspect compatible and serves also the formal Half duplex (RTS/CTS-handling). As the HAYES-1200 did serve only the CCITT 108/2 mode, the HAYES-2400 supports also the 108/1 mode. Really you can say, the HAYES-2400 is a complex intelligent unit. Despite the well written handbook of HAYES, it is a hard job to make a compatible one. From all modems (compatibles) I have seen, there are a few which come close to the HAYES, the most are fare away. As my job is Faultfinder (Support), I really was very pleased, HAYES did implement in the HAYES-2400, a really complete circuit test via the S16-register, even with remote commands, so the fully V54 norm of CCITT. As most Hobbyist but even profesionals have big problems with reliable circuit connections, and more the solvation of it, a modem without this feature nowadays isn't worth the word MODEM so certainly not the word HAYES. 2. HAYES-clones. What is "compatible". Really nothing if not exactly said with WHAT. "HAYES compatible" is to vaque. "HAYES command set compatible" is better. Most modems, so not all, are only compatible with a "subset of HAYES command set". But also most "hayes" modems have commands not existing with hayes. Some unlucky vendors did use commands or registers not used with hayes-1200 at that time, but later used in the HAYES- 2400. (Bad Ques). The best I can say most of the better clones are more or less compatible upto HAYES-1200. As I don't know if besides HAYES-1200 and the HAYES-2400, also a HAYES-300 exists, I further only refer to this two, from which both I have the specifications. In Europe a lot of 'hayes' modems with only the V21 and V23 speeds exists, which are similar, but absolute not connectable, with the BELL-103 and BELL-202 norm modems. As most application programs only use a small set of the HAYES-command set, most clones will run with these packages such that the user is pleased, not to use his fingers and ear to make a connection. This if he has a user friendly telephone company (are there), but mostly the results are hopeless in peak hours, if there is a mismatch between the modem commands and the terminal commands. I had a modem and a terminal program and on some day no nice CALL was succesfully. With finger and ear there was no problem. Reaction of the terminal was "BUSY". The real point was, the modem did not pickup in ATX2 mode the dial tone from the Telephone company, so didn't start dialling. As the modem had not a speaker (for cheapness), I could not use the ATM1 command, to follow the connection process. The dial signal was strong enough, but the frequency was a little ouside (WHO's) specification. 3. The HAYES set. With this I hope, without copying the whole 250 pages of both Hayes handbooks, to give enough information to understand the HAYES-set and the differences. Hayes propose to use as terminal program, the Hayes Smartcom II Version 2.1. 3.1. The Physical DCE/DTE-lines. With DTE is meant the Data Terminal Equipment (Your terminal or Host computer) and with DCE the Data Circuit (termination) Equipment (all equipment between two modems RS232 plugs). The HAYES-1200B is the 1200 type but as a card to be fitted into an IBM-PC. The same for HAYES-2400B. The pin assignments must be in accordance to ISO 2110. Pin # Circuit Towards Description 1200 2400 EIA/CCITT 1 AA 101 N/A prot. ground x x 7 AB 102 N/A signal ,, x x 2 BA 103 DCE transmit data x x 3 BB 104 DTE receive data x x 4 CA 105 DCE request to send x 5 CB 106 DTE clear to send H x 6 CC 107 DTE data set ready R x 20 108.1 DCE connect data set x x 20 CD 108.2 DCE data term. ready x x 22 CE 125 DTE ring indicator x x 8 CF 109 DCE data carrier detected x x 23 CI 112 DTE select altern. rate x 12 CI DTE as previous (Bell212) x x 24 DA 113 DCE TX-clock (DTE source) x 15 DB 114 DTE TX-clock (synchr.) x 17 DD 115 DTE RX-clock (synchr.) x Remark: x means served by the modem. H means tied to +10 volt (True). R means tied to pin 8. Pin 20 (DTR) can be simulated in the 1200 and 1200B type with a dipswitch. Pin 6 and 8 can be forced to true in the 1200 and 1200B type with a dipswitch. 3.2. The telephone line. On the telephone lin level some distinction can be made on the HAYES-2400, between jack type RJ12/RJ13 (multi line jack) and the RJ11/RJ41S/RJ45S (single line jack). The 1200 only supports the RJ11 (single line), RJ12/RJ13 (multi line), which can be set by dipswitches. This typically is different per country. In the USA and some other countries, the telephone set remaines connected in parallel to the modem. In other countries like the Netherlands the telephone set is switched of, as soon as the modem goes off-hook. 3.3. The modulation frequencies and call setup phase tones. The following information is not exactly the HAYES-modem information, but a hopefully readable extract from the CCITT-norms. As I have not the Bell-norms, more or less the USA norms are deducted from other documents. The frequencies used with the different baudrates are: 3.3.1. For the F(requency) S(hift) K(eying) methodes. These can be used as well as Synchrone. Norm Send Receive Answ. mode '0' '1' '0' '1' tone Bell-103(ORG) 1070 1270 2025 2225 1270 300 FD Bell-103(ANS) 2025 2225 1070 1270 2225 300 FD Bell-202(main) 2200 1200 2200 1200 2025 1200 HD Bell-202(back) 487 387 487 387 - 0-150 HD V21 (ORGinate) 1180 980 1850 1650 980 300 FD V21 (ANSwer) 1850 1650 1180 980 2100 300 FD V23-1 (main) 1700 1300 2100 1300 2100 600 HD V23-2 (main) 2100 1300 1700 1300 2100 1200 HD V23 (back) 450 390 450 390 - 0-150 HD Remark: '0'= "start bit" = "space" '1'= "stop bit" = "mark" FD = Full Duplex, HD = Half Duplex. Important is, the modems use filter technics to seperate the transmit channel and receive channel. Some autoanswering modems also by filter technics decide in which mode they are called. 3.3.2. Automatic answering sequence (V25). If ringing is received on the line, the CE/CT125 circuit (pin 22) will be raised true. If CD/108 circuit was true, the modem goes OFF-HOOK. If not the modem waits for a true signal on CD/108 (pin 20), before it goes OFF-HOOK. The modem remains after 'off hook', for 1.8-2.5 sec. silent and then transmits the 2100 Hz. answer tone during 2.6-4.0 sec. or till 100msec. after a response from the calling station. At least now 75 msec. silence is maintained. The 2100 Hz is intended to disable network echo cancellers or echo suppressors and is reversed in phase every 425-475 msec. Now the circuit CC/107 (pin 6) is set true to indicate to the terminal, a connection is ready. The calling modem reacts on the answer tone also by setting circuit CC/107 (pin 6) true. A response normally as mentioned is the frequency of a binary '1'. If the equipment of the telephone company does not have echo control devices, the 2100 Hz tone may be replaced by any other tone e.g. directly the binary '1'. Only after this sequence (or in ommission of it) directly the autospeed modems will determine the baudrate norm. In Europe, with its V23-splitbaud rate complexity, there are Hayes compatibles trying to select at the moment after the answer sequence to select: V21, V23 (viditel), V22 and V22bis. This means actually a detection criteria for carrier frequencies at 980/1180 (V21), 450/390 (V23) and 1200 V22(bis) modulated with 600 baud. At the same time all kind of frequencies like 2100, 550, 1800 Hz. and busy tone, dial tones around 425 Hz. has to be ignored. 3.3.3. For the D(iferential) P(hase) S(hift) K(eying) and the Q(uadrature) A(mplitude) M(odulation) methodes. These methodes are primarly for synchrone transmission, but asynchrone is allowed by inserting extra stop bits between characters. Norm Send Rec. Guard tone Mode Methode V22 (ORG) 1200 2400 - 600/1200 FD DPSK V22 (ANS) 2400 1200 1800(550) 600/1200 FD DPSK V22(bis) (ORG) 1200 2400 - 1200/2400 FD QAM V22(bis) (ANS) 2400 1200 1800(550) 1200/2400 FD QAM Bell-212A (ORG) 1200 2400 - 1200 FD DPSK Bell-212A (ANS) 2400 1200 - 1200 FD DPSK The guard tone is only send in the high channel (2400 Hz. carrier, so by the answering modem, but can be disabled per country. The 550 guard tone is another option. Basically the Bell-212 and the CCITT-V22 are the same. But in detail there are differences. Which, I don't know yet for sure, it may be the scrambled '0' instead '1's (see lateron). But in the HAYES-2400, there is a command ATBn, with which the BELL-212 (n=1) or V22 (n=0) is selected. This only for the 1200 baud FD mode. The V22bis is fully compatible with the V22 norm. The difference between V22 (600/1200 baud) and V22bis (1200/2400 baud) is V22 works with 2 dibits and V22bis with quadbits. The way of working of PSK/QAM modems is to complex to explain here, but it is important to know that a phase change of the modulated carrier of: 0 degrees is equal to dibit 01 90 degrees is equal to dibit 00 180 degrees is equal to dibit 10 270 degrees is equal to dibit 11 These first two bits in the V22bis quadbit are compatible with the dibits of V22, to remain compatabilty for fallback mode. The V22bis has another 4 levels of detection by means of a quadrature amplitude modulation technic. 3.3.4. Automatic answering mode V22(bis). At calling time the sequence as described above with the FSK type modem is valid for the V22(bis). The called modem reacts instead or after the answer sequence with unscrambled binary '1's at 1200 bit/sec. and well in the upper channel (2400 Hz. carrier). This till it detects scrambled '0' or '1's in the lower channel (1200 Hz. carrier). The calling modem remains silent till it for 155 msec. detects unscrambled '1's in the upper channel, after which it remains silent for 456 msec. and then transmit unscrambled double dibits 00 and 11, if in V22bis mode, for 100 msec. followed by scrambled binary '1's or if in V22 mode it transmits direct scrambled binary '1's (*). Here the distinction 1200/2400 baud is made by the calling modem. The called modem reacts with scrambled '1's preceded, if V22bis with the unscrambled double dibit 00 and 11. At the moment of detection of the double dibits, the circuit CI/112 (pin 12) is set true (indicating 2400 baud). In both cases the scrambled '1's are observed for 600 msec. after which the circuit CF/109 (pin 8) is set true. If V22 (1200) the data transfer is started under control of CA/104 (pin 3). In the V22bis mode (2400), first scrambled binary '1's are send form both sides for 200 msec. on 2400 bit/sec. mode. Noted, that till now all was transmitted on 1200 bit/sec. After this 200 msec. also the V22bis mode is ready for data transfer. I know it is confusing, but so it works. To make it more difficult, the (*) mentioned in the text is true for V22bis and for V22 alternative A and B only. For V22 alternative C, for the '1's you have to read '0's. As the V22 norm is very confusing on some aspects, one remark has to be made. In V22 (not V22bis) 3 alternatives can be selected. Alternative A and B are compatible with V22bis, but alternative C not. The difference is the scrambled binary '0's stead '1's of the calling modem. So the real difference between alternatives A/B and C is, that alternative C includes the possibility for mode V, for anisochronenous data upto 300 bit/sec. Which manufacturer tells me which alternative as mentioned in V22 he serves. Or has this to do with the Bell-212 norm. Who can tell? Has this to do with the famous ATBn command in the HAYES-2400 modem? See above. Be carefully with these V22 and Bell-212A norms. As explained before only the 2400 baud (V22bis) is compatible. The 1200 sometimes works, but sometimes not. E.g. I had an USA RIXTON 212 modem, not corrected for the European market. Also I had a Dutch designed (DATAD) V22(bis) V23 and V21 modem and an English (PACE) for the same speeds. The RIXTON works pretty most at the time with both the DATAD and PACE modem. But sometimes it goes wrong and the Eurpeans connects at 2400, which is strange, but true. With an original HAYES- 1200 (with no ATBn) command as the HAYES-2400 has, nearly the same result. The two Europeans hardly are connectable at 1200 baud to each other. This has in my opinion to do with the way of speed selection. We try to come out of this struggle. 3.4. Some advise on real physical level. If you are ggiing into communications with modems and you have no Telecomfreak-friend close to you and you want no nervous breakdown in the near future, have at least a "breakbox", self made or from the shop. This to follow the different DTE/DCE levels. If you want to log a HAYES session to evaluate the connection process or data exchange process, make from your old computer a "DATASCOPE". (See Appendix A for some suggestions). An other advise is to standardise your cable set. As some manufactures make a mash of the V24 or RS232C pins, you have not to follow it. On telephone line level it is handy to have in your surrounding a scope or frequency counter. 3.5. Connection of the terminal to the HAYES. The Hayes modem has a minimum and a maximum baud rate. If you connect a terminal to the modem, make sure you have the right pins connected in relation with the dipswitches. Also if you have selected e.g. 108/2 mode, be sure your terminal program support them. It is possible to connect only the pins 2,3 and 7. So in this case the DTR and the DCD are forced true. In general I don't like this methode. With the Hayes-1200, RTS and CTS are not used, so only full duplex is possible. With Hayes-2400 you have to use these signals only if you use the Half Duplex mode (Synchrone mode). Otherwise RTS (pin 4) is neglected and CTS (pin 5) is set true. So if you have connected the terminal properly, at the time you give an 'A' or 'a', the modem decides what the baudrate is and set the terminal interface UART according to it. Hayes is very street forward. This speed is maintained till after the , which always finishes a command line. With the next A from a new AT command line, a new speed can be defined. There is one other possibility. In auto answer mode or if a call is made, the baudrate can be else as the speed in the last passed command mode. This on real modem level, the baudrate detection selects another speed. The Hayes reacts with the connect code on this last command mode speed and than switches to the new speed. To give an example. Suppose the terminalspeed is 2400 baud. A dial is made towards a 1200 baud only modem. The Hayes will start the connect phase as described in 3.3.2. but finally will get a connection on 1200 baud. So he will react towards the terminal with 2400 baud with 'CONNECT' or '1', switches back to 1200 baud, which the terminal has to follow, otherwise it result in a terminal/modem mismatch. Also a +++ on 2400 baud will not be accepted. Only 1200 baud, from this moment on. So suppose the established call at 1200 baud is broken. The Hayes will, after the carrier disappear, fall back into command mode still in 1200 baud. The terminal has to give an AT on 2400 baud if it wants the original 2400 baud connection again. 3.6. The differences in the Hayes command set. Very short a comparision between HAYES-1200 and HAYES-2400 modem will be given and only per command a short functional recoqnition. First however the Hayes command-input line. It starts with AT or at (no mix of UPPER/lower) and ends with a cariage return from now on indicated with . The only exeption is the A/ command, which needs no . During commandline editing backspace (hex '08') is accepted. One or more commands can be given after one leading AT. The max. length of the input string however is 40 char. Blanks can be inserted for more readability. Command. What does it. Hayes-1200 Hayes-2400 Return code AT Attention y y OK A/ Repeat last comm. y y depends A Off hook (ANS) y y none (data) Bn 1200 (V22/Bell) - n=0-1,1 OK Cn TX off/on n=0-1 - OK D Dial y y see modifier En Echo off/on(comm) n=0-1 n=0-1,1 OK Fn Echo off/on(data) n=0-1 - OK Hn Hook on/off/spec. n=0-2 n=0-1 none (data) In prod.code/prom-cc n=0-1 n=0-2 info Ln Speaker (L/M/H) - n=0-2,1 OK Mn Speaker off/on n=0-2 n=0-3,1 OK On Online only O n=0-1 none (data) P Set pulse dial y y OK Qn Result code Y/N n=0-1 n=0-1,0 OK Sr=n Set reg. r to n r=0-16 r=0-27 OK Sr? Display reg. r r=0-16 r=0-27 contents r T Set touch dial y y OK Vn Result code N/W n=0-1 n=0-1,1 OK Xn Dial process n=0-1 n=0-4,4 OK Yn Long disconn. - n=0-1,0 OK Zn Reset only Z n=0-1 OK &Cn DCD on/carrier - n=0-1,0 OK &Dn DTR modes - n=0-3,0 OK &F Load factory set - y OK &Gn Gaurd tone - n=0-2,0 OK &Jn RJ-jack sel. - n=0-1,0 OK &Mn Asynch./Synchr. - n=0-3,0 OK &Pn Pulse ratio - n=0-1,0 OK &Rn CTS mode - n=0-1,0 OK &Sn DSR mode - n=0-1,0 OK &Tn Test local/remote - n=0-8 OK &V Display conf/tel - y OK &Wn Write conf. MOS - n=0-1 OK &Xn Line clock mode - n=0-2,0 Ok &Yn Sel. default prof.- n=0-1 OK &Zn Store teleph. nr. - n=0-3 OK Remark: n=0-2,1 means, n can be 0,1,2 and 1=default. If n=0 this may ommitted. (ATV0 equal to ATV). All numbers are in decimal (max.=255). Dial What does Hayes-1200 Hayes-2400 Modifier it P Pulse dial y y R Reverse to ANSW y y Sn Dial stored tel. - n=0-3 T Touch dial y y W Wait 2e dialtone - y . Pause y y ! Flash - y @ Wait for silence - y ; Return to comm. y y The registers. Reg. What does it. Hayes-1200 Hayes-2400 S0 Ring to answ.on 0-255 0-255,00 S1 Ring count 0-255,00 0-255,00 S2 Escape code 0-127,43 0-127,43 ASCII S3 Cariage return 0-127,13 0-127,13 ASCII S4 Line feed code 0-127,10 0-127,10 ASCII S5 Back space code 0-127,08 0-127,08 ASCII S6 Wait for dial tone 0-255,02 0-255,02 Sec. S7 Wait for carrier 1-30,30 1-30,30 Sec. S8 Pause time comma 0-255,02 0-255,02 Sec. S9 Carrier detect time 1-255,06 1-255,06 1/10 Sec. S10 Lost carrier time 1-255,07 1-255,14 1/10 Sec. S11 DTMF dialing speed 50-255,70 50-255,95 mSec. S12 Escape code guard 0-255,50 0-255,50 1/50 Sec. S13 UART status reg. y y S14 Option reg. y x'AA' S15 Flag reg. y y S16 Modem test 0-2,0 bit settings S17 res. - res. S18 Modem test time - 1-255,00 Sec. S19 Res. - Res. S20 Res. - Res. S21 Bit mapped options - 00 S22 Bit mapped options - x'76' S23 Bit mapped options - 07 S24 Res. - Res. S25 Detect DTR change - 0-255,05 1/100 Sec. S26 RTS to CTS delay - 0-255,01 1/100 Sec. S27 Bit mapped options - x'40' Remark: 1-255,01 means, range 1 till 255, 01=default. All numbers are in decimal (max.=255). x'76' is hexadecimal. Return codes Hayes-1200 Hayes-2400 Digit Word 0 OK y y 1 CONNECT y y 2 RING y y 3 NO CARRIER y y 4 ERROR y y 5 CONNECT 1200 y y 6 NO DIALTONE - y 7 BUSY - y 8 NO ANSWER - y 9 reserved - - 10 CONNECT 2400 - y ======== Appendix A. Datascope. A datascope looks to both the RXD and the TXD line of a V24/RS232C line. So only follows what happens on the line. There are very nice commercial packages as FELINE, HP etc., but they are expensive and they use mostly a special POD to connect to the V24 line. Most of them you have to preset on one speed and than to start the logging. If you have an old computer with better two speed programmable UART or a SIO chip and you can program them in Assembler/basic/pascal or C, you can make your one one. The next story is a simplified logunit only to log datastreams preceded with a AT-string. Most of the application programs works in terminal session as well filetransport in a half duplex mode. Or better, never the TX and RX line transports a character. So basically in default you have to look to the TXD-line, and look at 2400 baud for a character x'41','06', '78' or '01'. At that moment you know that probably the speed is 2400, 1200, 600 or 300 baud. You get on line speeds 600 and 1200 a framing error, because the stop-bit is not detected. Now depending the detected speed you have to wait (time-out) till the rest of the character is passed, then you have to change the speed of your comm-port, and await for the 'T', If it is a 'T' than you have the speed, if not wait on 2400 baud for the posibilities as described above. The basic idee behind this is really simple. If you listen with 2400 bit/sec to a 300 bit/sec send character, the start bit is detected and will serve for the startbit and 7 bits char. bits (so 7 zero bits). The eights char. bit is formed of the LSB bit and well 1/8 portion of it. The second portion will be the stop bit. So if on the line really is transmitted a 600 bit/sec char., the same is true with 1/4 portions. Furthermore you have to look to both the TXD and RXD line, if on one a char. is received. If so you put this char. in its own buffer and in the other one a x'00'. Lateron you can print it out, one line from buffer RXD, one line from buffer TXD in Hex or ASCII (or both) outfit. Go on on the same speed till you didn't receive for 30 sec. any character on both lines and start again with AT synchronisation. In fact the HAYES inside micro computer is doing the same. Don't try to write the buffer to disk at first instance, because you need a DMA at least, but also 2 buffers. So buffer it in memory only. You can try to write to disk in the silence just before the new AT string.