Próbowałem połączyć Nokię 6610i z IBM ThinkPad 600X za pomocą IrDA.
Udało mi się uzyskać połączenie jedynie w trybie FIR po modyfikacji parametrów modułu.
Podaję szczegółowy opis sprzętu i procedury.
Oto chip mojego portu
Kod: Zaznacz cały
findchip -v
Found NSC PC87338 Controller at 0x2e, DevID=0x0b, Rev. 2
SIR Base 0x2f8, FIR Base 0x2f8
IRQ = 3, DMA = 1
Enabled: yes, Suspended: no
UART compatible: yes
Half duplex delay = 0 us
Kod: Zaznacz cały
findchip -dv
Found PC87338 chip, revision=2
Chip is in PnP mode
Found NSC PC87338 Controller at 0x2e, DevID=0x0b, Rev. 2
SIR Base 0x2f8, FIR Base 0x2f8
IRQ = 3, DMA = 1
Enabled: yes, Suspended: no
UART compatible: yes
Half duplex delay = 0 us
Kod: Zaznacz cały
00:05 IBM0071 IBM Thinkpad infrared port
state = active
io 0x2f8-0x2ff
irq 3
dma 1
Kod: Zaznacz cały
[ 27.629225] nsc-ircc, chip->init
[ 27.629237] nsc-ircc, Found chip at base=0x02e
[ 27.629275] nsc-ircc, driver loaded (Dag Brattli)
[ 27.630576] IrDA: Registered device irda0
[ 27.630648] nsc-ircc, Found dongle: Differential serial interface
Kod: Zaznacz cały
isapnp: Scanning for PnP cards...
[ 4.397697] isapnp: No Plug & Play device found
[ 4.410570] Serial: 8250/16550 driver $Revision: 1.90 $ 4 ports, IRQ sharing enabled
[ 4.410900] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 4.412840] 00:03: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Kod: Zaznacz cały
cat /proc/interrupts
CPU0
0: 420024 XT-PIC-XT timer
1: 1839 XT-PIC-XT i8042
2: 0 XT-PIC-XT cascade
3: 4 XT-PIC-XT
4: 7 XT-PIC-XT
5: 3 XT-PIC-XT
6: 5 XT-PIC-XT floppy
7: 4 XT-PIC-XT parport0
8: 1 XT-PIC-XT rtc0
9: 177743 XT-PIC-XT acpi
10: 3 XT-PIC-XT
11: 13525 XT-PIC-XT uhci_hcd:usb1, yenta, yenta, CS46XX
12: 138490 XT-PIC-XT i8042
14: 72222 XT-PIC-XT ide0
NMI: 0 Non-maskable interrupts
LOC: 0 Local timer interrupts
RES: 0 Rescheduling interrupts
CAL: 0 function call interrupts
TLB: 0 TLB shootdowns
TRM: 0 Thermal event interrupts
SPU: 0 Spurious interrupts
ERR: 0
MIS: 0
Sprawdziłem informacje o kanałach dma dla urządzeń ISA
Kod: Zaznacz cały
cat /proc/dma
1: irda0
2: floppy
4: cascade
Teraz dane o portach szeregowych.
Kod: Zaznacz cały
setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
setserial -a /dev/ttyS1
/dev/ttyS1: No such device
Kod: Zaznacz cały
/dev/ttyS1, Line 1, UART: unknown, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
Kod: Zaznacz cały
setserial -a /dev/ttyS0
/dev/ttyS0, Line 0, UART: 16550A, Port: 0x03f8, IRQ: 4
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
setserial -a /dev/ttyS1
/dev/ttyS1, Line 1, UART: 16550A, Port: 0x02f8, IRQ: 3
Baud_base: 115200, close_delay: 50, divisor: 0
closing_wait: 3000
Flags: spd_normal skip_test
Ustawienie IrDA na COM 2 (2f8) jest zalecane dla thinkpadów, dlatego ostatecznie pozostałem przy takim ustawieniu.
Rzeczywiste dane portu uzyskane z BIOS dzięki programowi ps2.exe for DOS firmy IBM to:
Kod: Zaznacz cały
ps2 ? ir
ADDress 1
DMA 3
IRQ 3
COMADDress 2F8
Wydaje mi się, że informacja po załadowaniu modułu FIR
Kod: Zaznacz cały
kernel: [ 9903.835088] nsc-ircc 00:05: activated
kernel: [ 9903.835172] nsc-ircc, chip->init
kernel: [ 9903.835184] nsc-ircc, Found chip at base=0x02e
kernel: [ 9903.835222] nsc-ircc, driver loaded (Dag Brattli)
kernel: [ 9903.839110] IrDA: Registered device irda0
kernel: [ 9903.839125] nsc-ircc, Using dongle: IBM31T1100 or Temic TFDS6000/TFDS6500
kernel: [ 9924.865030] IrCOMM protocol (Dag Brattli)
irattach: executing: '/sbin/modprobe irda0'
irattach: + FATAL: Module irda0 not found.
irattach: Trying to load module irda0 exited with status 1
irattach: executing: 'echo florens > /proc/sys/net/irda/devname'
irattach: executing: 'echo 1 > /proc/sys/net/irda/discovery'
irattach: Starting device irda0
Wypróbowałem następujące metody połączenia.
1. SIR z użyciem irtty.
Uruchomienie irdy
Kod: Zaznacz cały
irattach /dev/ttyS1 -s
Dane z /var/log/messages
Kod: Zaznacz cały
Stopping device /dev/ttyS1
irattach: ioctl(SIOCGIFFLAGS): No such device
irattach: exiting ...
Próbowałem trochę powalczyć z setpnp
Niestety, aby setpnp mogło działać trzeba włączyć obsługę pnp w jądrze.
2. FIR
Sterownik FIR powinien się ładować przed modułem obsługi portów szeregowych inaczej IrDA jest zajęta przez zwykły port SIR i sterownik FIR nie może zainicjalizować chipa. Dlatego usunąłem
Kod: Zaznacz cały
rmmod irtty-sir sir-dev nsc-ircc ircomm-tty ircomm
Kod: Zaznacz cały
ERROR: Module ircomm_tty does not exist in /proc/modules
ERROR: Module ircomm does not exist in /proc/modules
Wyłączyłem połączenie szeregowe
Kod: Zaznacz cały
setserial /dev/ttyS1 uart none
Kod: Zaznacz cały
modprobe nsc-ircc dongle_id=9 io=0x2f8 irq=3 dma=3
Kod: Zaznacz cały
echo 115200 > /proc/sys/net/irda/max_baud_rate
Kod: Zaznacz cały
modprobe ircomm-tty
Kod: Zaznacz cały
irattach irda0 -s
Teraz bardzo istotna uwaga. Sprawdzanie wpisów /proc/sys/net/irda/discovery czasami nie daje żadnych wyników, jedynie zapis 1. irdadump pokazuje jednak połączenie z telefonem, a ifconfig ilość wysłanych i pobranych danych z interfejsu irda0. Początkowo sugerowałem się brakiem wyników w logu discovery i błędnie myślałem, że IrDA jest niesprawna.
Mam pytanie dotyczące wpisu /etc/modutils/irda-utils, czy
alias tty-ldisc-11 irtty nie powinien być alias tty-ldisk-11 irtty-sir. Według linux irda how to od jądra 2.6 irtty zmienił się na irtty-sir.
Sptkałem się również z opinią według której wszystkie wpisy w irda-utils są nieważne dla jądra 2.6. Nie wiem na ile jest to zgodne z prawdą.
Gdyby ktoś chciał uruchomić ps2exe bez partycji DOS na dysku można pobrać obraz dyskietki freeDOS uruchomić freeDOS wyjąć dyskietkę po załadowaniu programu wstawić 2 dyskietkę z następującymi programami przekopiowanymi z programu ps2 for DOS
aodbsmd.ddp
aodbsmd.sys
diskdo
diskdo.id
diskdo.ver
helpmsg1.dat
helpmsg2.dat
helpmsg3.dat
paranum3.dat
ps2.exe
ps2.msg
ps2.ver
ps2a.idp
ps2main.exe
ps2n.idp
ps2vdd.dll
routine1.dat
routine2.dat
routine3.dat
routine4.dat
routine5.dat
utildos2.rsp
i można korzystać z ps2. Jedyną wadą takiego rozwiązania jest wolniejsza praca programu.
Po zmianie wszystkich ustawień należy zrestartować system małpim chwytem ctrl+alt+Delete. Wyłączenie komputera spowoduje utratę zmian.
Przepraszam, za bardzo długi opis, ale chciałem opisać wszystkie moje próby, żeby oszczędzić wam powtarzania nieskutecznych metod na uruchomieni tego dosyć kłopotliwego sprzętu.
Gdyby komuś udało się uruchomić irdę w trybie SIR na sterowniku nsc-ircc na starym ThinkPadzie, prosiłbym o opis jak tego dokonał.
Problem rozwiązany w małej dystrybucji Slitaz 4 (kernel 2.6.37), bo ten stary laptop jest za mało wydajny na Wheezy.
Teraz nie trzeba podawać żadnych parametrów dla modułu. Nie trzeba nawet zmieniać prędkości transferu.
Wystarczą 3 polecenia
[LEFT]modprobe nsc-ircc [/LEFT]
[LEFT]modprobe irtty-sir
[/LEFT]
[LEFT]ifconfig irda0 up[/LEFT]
[LEFT]Drugie polecenie uruchamia irdę w trybie sir. Port irdy to /dev/ttyS1[/LEFT]
[LEFT]W dystrybucji Slitaz trzeba samodzielnie skompilować moduł nsc-ircc, ale to nie dotyczy Debiana, więc pomijam opis kompilacji.[/LEFT]