Реклама:

I Хотя электронные карточки с I2C и похожими шинами производит I множество изготовителей, не следует забывать, что именно компания Philips разработала концепцию "шины I20.

Выпустив карты D2000 (256 байт) и D4000 (512 байт), фирма И после многих лет производства инкартированных микросхем PCF 8582 с нестандартной цоколевкой наконец-то приняла цоко-■левку, рекомендованную в ISO 7816. Поэтому обозначение кон-Мтактов, приведенное на рис. 4.14, следует на сегодняшний день считать абсолютно устаревшим, тем более что для карты на базе PCF 8582 МС необходимо подключение внешней RC-цепи к контакту РТС согласно схеме, представлениой на рис. 4.15.

В результате этой эволюции устройства, рассмотренные в насто-Мящей главе, могут считывать и записывать данные в память выше-И указанных карт, которые есть даже в розничной торговле (компания SELECTRONIC), причем достаточно дешевы и обладают памятью большого объема - 2048 и 4096 бит соответственно.

Карты на микросхемах 12С

Эти карты интересны еще и тем, что обеспечивают свободны; доступ как для чтения, так и для записи, поскольку не снабжен никакой системой защиты. В отличие от стандартных синхронных, в чип-картах I2C обмен данными осуществляется не побитно, а по байтно, причем можно выбрать произвольный адрес и начиная с него последовательно считывать любое количество байтов. Поэто му программа чтения LECTI2C.BAS действует совсем иначе, нежели ранее описанные программы.

10 REM - LECTI2C.BAS -

20 KEY OFF :CLS :DEF SEG=0

30 S1=PEEK(SH40fi)+256-PEEK(8H409) для LPT1

40 S2=P£EK(SH40A)t256.PEEK(8H40B) 'для LPT2

50 OUT S2.0 :E2=S2+1

60 IF (DF(E2) AND 64) о 0 THEN S=S1 :C0TO 100 70 OUT S2.12R

B0 IF (INP(E2) AND 64) о 64 THEN S=S1 :G0T0 100 90 S=S2 100 E=S+1

110 OUT S.2.0UT S+2,0

120 CLS :РИШТ"Вставить карту I2G для чтения, затем нажать <ENTER> 130 INPUT Z$

140 OUT S.2:0UT S+2,0:0UT S.2:0UT S+2.1:0UT S.0:0UT S<2.1 START-услояие

150 M=&HA0 :G0SUB 460 :G0SUB 400

160 OPEN "I2C. ROM" FOR OUTPUT AS "1

170 CLS : PRINT "Ввести количество считываемых байтов"

160 INPUT С :CLS

150 М=0 :G0SUB 460 :G0SUB 400

200 FOR T=0 TO 300 :NEXT T

210 OUT S,2:0UT S+2,0:0UT S.2:0UT S+2.1:0UT S.0:0UT S+2.1

220 Н=Ш1 :G0SUB 460 :GOSUB 400

230 FOR G=1 TO C-1

240 C0SLB 300 : GOSUB 3B0

250 NEXT G

260 GOSUB 300 :G0SUB 390

270 OUT S,0:0UT S+2.1:0UT S,2:0UT S+2,1:0UTS.2:0UT S+2.0 ■ STOP-условие 2B0 EN0

290 REM (c)1992.1997 Patrick GUEULLE 300 K=D 'Прием байта 310 FOR F=0 TO 7

320 OUT S,0:0UT S+2.D:0UT S.2:0UT S+2,0

330 D=INP(E) :D= D AND 12B

340 IF 0=0 THEN K=K>2_(7-F)

350 OUT S.0:0UT S+2,0:NEXT F

360 PRINT USING ■""""■;"; :РЯШТ#1.1(:

370 RETURN

380 OUT S,0:0UT S+2,1:0UT S.2:0UT S+2,1:0UTS,0:0UT S+2,1:RETURN tx 0 390 OUT S,0:OUT S+2.0:0UT S,2:0UT S+2,0:0UTS.0:0UT S+2.0:RETURN 'tx 1 400 OUT S,0:OUT S+2.0:0UT S.2.0UT S+2,0 'ожидание ACK 410 N=0

420 D=INP(E) :D= 0 AND 128 430 N=N+1:IF N>500 THEN END 440 IF D=0 THEN 420 450 OUT S,0:0UT S+2.0:RETURN 460 D=0 : REH передача байта 470 IF M>127 THEN 0=1M=H-128 4B0 GOSUB 630

490 IF M>63 THEN D=TM=M-64 500 GOSUB 630

510 IF M>31 THEN D=1M=N-32 520 GOSUB 630

530 IF M>15 THEN 0=1 H=H-16

540 GOSUB 630

550 IF M>7 THEN D=1:M=M-B

560 GOSUB 630

570 IF M>3 THEN D=1:M=M-4

5B0 GOSUB 630

590 IF M>1 THEN D=1;H=N-2

600 GOSUB 630

610 0=M .GOSUB 630

620 RETURN

630 IF D=1 THEN GOSUB 390 640 IF D=0 THEN GOSUB 380 650 D=0:RETURN

Считывая последовательно заданное число байтов, начиная с первого (обычно все содержимое памяти), программа выводит их на экран в десятичной форме и одновременно сохраняет в текстовом файле, называемом I2C. RCH. Формат этого файла (free format decimal — свободный десятичный формат) совместим с многочисленными утилитами перекодировки, например в двоичный или в шест-надцатеричный форматы. Он в любом случае поддерживается программой записи PR0GRI2C.BAS, что позволяет простейшим способом тиражировать карты данного типа.

10 REM - PR0GRI2C.BAS -I 20 KEY OFF :CLS :DEF SEG=0

30 S1=PEEK(&H408)+256.PEEK(&H409) для LPT1 :

40 S2=PEEK(4H40A)+256.PEEK(&H40B) для LPT2 :

50 OUT S2.0 :E2=S2H

60 IF (INP(E2) AN0 64) v> 0 THEN S=S1 :G0TO 100 70 OUT S2.12B

ВО IF (INP(E2) AND 64) о 84 THEN S-S1 :G0T0 100 90 S=E2 100 E=S+1

110 OUT S.2:007 S+2.0:L=0

120 CLS :PRlNT"fieenHTe имя используемого файла с расширением ROM" 130 INPUT F$ : F$=F$+". ROM" 140 OPEN F$ FOR INPUT AS "1 160 DIN W(4096)

160 CLS :PRINT"- Идет чтение файла -

170 IF E0F(1) THEN 210

1B0 INPUT"1.W(L)

190 L=L+1

200 GOTO 170

210 CL0SE81 XLS

220 CLS : PRINT" Вставить программируемую карту I2C и нажать <ENTEB>" 230 РНИГВнииание! Минимальная емкость карты : ";L;" байт 240 INPUT Z$ :CLS : PRINT"- Идет программирование -"' 250 FOR G=0 TO L-1 .PRINT""";

260 OUT S.2:0UT S+2.0:0UT S,2:dlT S*2,1:0UT S,0:OUT S+2.1 STAflT-условие 270 M=SHAO :GOSUB 430 .COSUB 370 280 M=G :GOSUB 430 :COSUfl 370 290 M=W(G) :GOSUB 430 :GOSUB 370

300 OUT S,0:OUT S+2.1:0UT S.2:0UT S+2,1:0UT S,2:0UT S+2.0 STOP-условие 310 FOR T=0 TO 2000:NEXT T 320 NEXT G 330 END

340 REM (0)1992.1997 Patrick GUEULLE

350 OUT S.O:OUT S+2.1:DUT S,2:0UT S+2.1:0UT S,0:OUT S+2,1:RETURN tx 0 360 OUT S,0:OUT S+2.D:DUT S.2.DUT S+2,0:0UT S,0:OUT S+2.D:RETURN 'tx 1 370 OUT S.O'OUT S*2,D:0UT S,2:0UT S+2,0 : REN ожидание ACK 3B0 N=0

390 C=IhP(E) -d= d ANO 12R 400 N=N*1:IF N>500 THEN ENO 410 IF D=0 THEN .390 420 DUT S.O:OUT S+2.0-RETURN 430 D=o : REN вывод байта 440 IF M>127 THEN D=1:H-M-12B 450 GOSUB 600

460 IF M>63 THEN 0=1:N=M-64 470 GOSUB 600

4B0 IF M>31 THEN D=1:M=N-32 490 GOSUB 600

500 IP M>15 THEN D=1:H=M-16

510 GOSUB 600

520 IF N>7 THEN D=1:M=h-B

530 GOSUB 600

540 IF M>3 THEN 0=1:H=H-4

550 GOSUB 600

560 IF M>1 THEN D=1:h=m-2

570 GOSUB ООО

580 d=h :G0SUB 800

590 RETURN

600 IF 0=1 THEN GOSUB 360 610 IF D=0 THEN GOSUB 350 620 D=0: RETURN

Интересно отметить, что эти карты "пустые в единицах" (когда они новые - заполнены байтами FFh, или 255), и для них безразлично, как ведется запись: из 1 в 0 или из 0 в 1.

Чтение GPM 896 || Оглавление || Изготовление "фальшивой карты" с микросхемой 12С