Linux parallel port cards

Once upon a time, every computer came with a parallel port. No longer, and in a Windows dominated world, USB to parallel port adapters are often suggested. Even if a card based parallel port can be found, it’s going to be even rarer to find one that guarantees Linux support. The parallel port still has utility, especially with maker projects where simple electrical interfacing with the world is needed.

For a new project, I needed a parallel port supported by Linux, and usable by LinuxCNC. A PCI based card is likely to work, but they will become rarer, as many newer computers only have PCIe ports. Here I document my trial of parallel port cards. I hope the information is useful and if you know of additional cards, please comment.

Four parallel ports cards were purchased and tested on a Fedora 20 system with the kernel 3.15.7-200.fc20.x86_64. Two of cards are PCI and two are PCIe. each card has a picture of the card and of the primary chip. The relevant sections of dmesg -r and lspci -vvvx are also included for those interested. Finally, a mention of a parallel port breakout card is included.

Summary

Intek21 TK9902 PCI Worked Moschip MCS9805CV
StarTech PCI1P PCI Worked Moschip MCS9805CV-BA
StarTech PEX1P PCIe Worked Oxford Semi OXPCIe952-FBAG
Iocrest SI-PEX10010 PCIe Failed WCH CH382L
Board also sold as
Syba WCH382L Chipset SI-PEX10010?

Intek21 TK9902 Worked

Appears nearly identical to the StarTech PCI1P.

Output of dmesg


[ 6.267491] PCI parallel port detected: 9710:9805, I/O at 0xcff8(0xcff0), IRQ 19
[ 6.267586] parport0: PC-style at 0xcff8 (0xcff0), irq 19 [PCSPP,TRISTATE]

Output of lspci


06:00.0 Communication controller: MosChip Semiconductor Technology Ltd. PCI 1 port parallel adapter (rev 01)
Subsystem: LSI Logic / Symbios Logic Device 0010
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 19
Region 0: I/O ports at cff8 [size=8]
Region 1: I/O ports at cff0 [size=8]
Region 2: I/O ports at cfe8 [size=8]
Region 3: I/O ports at cfe0 [size=8]
Region 4: I/O ports at cfd8 [size=8]
Region 5: I/O ports at cfc0 [size=16]
Kernel driver in use: parport_pc
Kernel modules: parport_pc
00: 10 97 05 98 01 00 80 02 01 00 80 07 01 20 00 00
10: f9 cf 00 00 f1 cf 00 00 e9 cf 00 00 e1 cf 00 00
20: d9 cf 00 00 c1 cf 00 00 00 00 00 00 00 10 10 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00

Images

StarTech PCI1P_LP Worked

Appears nearly identical to the Intek21 TK9902.

Output of dmesg


[ 6.179325] PCI parallel port detected: 9710:9805, I/O at 0xcff8(0xcff0), IRQ 19
[ 6.179427] parport0: PC-style at 0xcff8 (0xcff0), irq 19 [PCSPP,TRISTATE]

Output of lspci


06:00.0 Communication controller: MosChip Semiconductor Technology Ltd. PCI 1 port parallel adapter (rev 01)
Subsystem: LSI Logic / Symbios Logic Device 0010
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 19
Region 0: I/O ports at cff8 [size=8]
Region 1: I/O ports at cff0 [size=8]
Region 2: I/O ports at cfe8 [size=8]
Region 3: I/O ports at cfe0 [size=8]
Region 4: I/O ports at cfd8 [size=8]
Region 5: I/O ports at cfc0 [size=16]
Kernel driver in use: parport_pc
Kernel modules: parport_pc
00: 10 97 05 98 01 00 80 02 01 00 80 07 01 20 00 00
10: f9 cf 00 00 f1 cf 00 00 e9 cf 00 00 e1 cf 00 00
20: d9 cf 00 00 c1 cf 00 00 00 00 00 00 00 10 10 00
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00

Images

StarTech PEX1P Worked

Output of dmesg


[ 6.513089] PCI parallel port detected: 1415:c110, I/O at 0xcf00(0xce00), IRQ 19
[ 6.513214] parport0: PC-style at 0xcf00 (0xce00), irq 19 [PCSPP,TRISTATE,EPP]

Output of lspci


07:00.0 Parallel controller: Oxford Semiconductor Ltd Device c110 (prog-if 02 [ECP])
Subsystem: Oxford Semiconductor Ltd Device c110
Control: I/O+ Mem- BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 4 bytes
Interrupt: pin A routed to IRQ 19
Region 0: I/O ports at cf00 [size=8]
Region 1: I/O ports at ce00 [size=4]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=55mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [70] Express (v1) Legacy Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <128ns, L1 <2us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s unlimited, L1 unlimited
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
Capabilities: [100 v1] Device Serial Number 00-30-e0-11-11-00-01-10
Capabilities: [110 v1] Power Budgeting <?>
Kernel driver in use: parport_pc
Kernel modules: parport_pc
00: 15 14 10 c1 05 00 10 00 00 02 01 07 01 00 00 00
10: 01 cf 00 00 01 ce 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 15 14 10 c1
30: 00 00 00 00 40 00 00 00 00 00 00 00 0b 01 00 00

Iocrest SI-PEX10010 Failed

This board was sold as “Syba WCH382L Chipset SI-PEX10010” but Iocrest was the name on the box. Regardless, the same chipset is present and the same model number is used.

While this board failed to be recognized as a parallel port, there may be hope. However, an better solution is likely to avoid the card.

Output of dmesg


[ 0.183504] pci 0000:07:00.0: [1c00:3050] type 00 class 0x070005
[ 0.183526] pci 0000:07:00.0: reg 0x10: [io 0xcc00-0xccff]
[ 0.183542] pci 0000:07:00.0: reg 0x14: [mem 0xfbef8000-0xfbefffff pref]
[ 0.183559] pci 0000:07:00.0: reg 0x18: [io 0xcf00-0xcf03]
[ 0.183620] pci 0000:07:00.0: reg 0x30: [mem 0x00000000-0x00007fff pref]
[ 0.183702] pci 0000:07:00.0: PME# supported from D0 D3hot D3cold

Output of lspci


07:00.0 Serial controller: Device 1c00:3050 (rev 10) (prog-if 05 [16850])
Subsystem: Device 1c00:3050
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Interrupt: pin A routed to IRQ 19
Region 0: I/O ports at cc00 [size=256]
Region 1: Memory at fbef8000 (32-bit, prefetchable) [size=32K]
Region 2: I/O ports at cf00 [size=4]
[virtual] Expansion ROM at fbe00000 [disabled] [size=32K]
Capabilities: [60] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [68] MSI: Enable- Count=1/32 Maskable+ 64bit+
Address: 0000000000000000 Data: 0000
Masking: 00000000 Pending: 00000000
Capabilities: [80] Express (v2) Legacy Endpoint, MSI 00
DevCap: MaxPayload 256 bytes, PhantFunc 0, Latency L0s <2us, L1 <32us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s unlimited, L1 unlimited
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis+, LTR-, OBFF Not Supported
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR-, OBFF Disabled
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v1] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES- TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
00: 00 1c 50 30 03 00 10 00 10 05 00 07 01 00 00 00
10: 01 cc 00 00 08 80 ef fb 01 cf 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 00 1c 50 30
30: 00 00 00 00 60 00 00 00 00 00 00 00 0b 01 00 00

This Post Has 18 Comments

  1. I confirm that the WCH382L does not work with Linux..vendor 1C00:3050. It comes up only as a serial adapter

  2. Thank you reading and for the confirmation. Since this post was originally made, I've found that while the StarTech PEX1P works as a simple parallel port card, it does not work as an EPP parallel cord, at least with the distribution that LinuxCNC uses today. However, the Syba PCIe SD-PEX10005 does work.

  3. WCH382L does not work with linux. Thank you Kent for confirming about the StarTech PEX1P, it was in my shopping cart and I read this comment. I will be picking up the Syba PCIe SD-PEX10005.

  4. Glad to have helped. I can sympathize about finding a parallel port card for Linux. It's getting harder. Best of luck to you.

  5. Seems like the card doesn't like my motherboard, I cant get it to boot reliably. Once booted and I installed drivers, it shows up as disabled.

    I/O ports at c000 [disabled]

  6. Is the "I/O ports at c000 [disabled]" from Linux's kernel messages? Which Linux distribution are you using? Are you wiling to share the relevant all lines from the kernel message? You're using the Syba PCIe SD-PEX10005?

  7. this is output from lspci -v on linuxcnc-2.7-wheezy.iso I am willing to share if you tell me how can i get them. and yes I am using the SD-PEX10005. I installed the driver from the provided CD and insmod 99xx.ko. I will try again after work.

  8. I didn't need to install any drivers from the CD. I'm not sure that will work well since LinuxCNC seems particular about kernel version and installed modules. E.g., I didn't have much success with installing updates, and each time I did, I needed to reinstall linuxcnc-2.7-wheezy.iso. So, the last time, I left the installation alone, and all has worked well. The only thing I've modified is the LinuxCNC configuration files in ~/linuxcnc/configs/.

    The following what I see, with that card, unfortunately, the dmesg output may not be useful to you unless you're using Pico System's Univ. Stepper Controller. I remember Jon Elson, the creator of the Pico card, having me try backlisting modules when trying to find a working parallel port card, but I think all that was undone when found to be unnecessary, once we found a working card.

    > lspci -v (as root)

    01:00.0 Parallel controller: NetMos Technology Device 9900 (prog-if 03 [IEEE1284])
    Subsystem: Device a000:2000
    Flags: bus master, fast devsel, latency 0, IRQ 11
    I/O ports at e010 [size=8]
    I/O ports at e000 [size=8]
    Memory at f7e01000 (32-bit, non-prefetchable) [size=4K]
    Memory at f7e00000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [78] Power Management version 3
    Capabilities: [80] Express Legacy Endpoint, MSI 00
    Capabilities: [100] Virtual Channel
    Capabilities: [800] Advanced Error Reporting

    and from dmesg… though I think these only appear because I have LinuxCNC start automatically on startup of the machine.


    [ 11.491751] Using direct parport at ioaddr=0xe010:0xe410
    [ 11.491756] PPMC: checking EPP bus 0 at port E010
    [ 11.491758] PPMC: slot 0: ID code: 45 Univ. Stepper Controller
    [ 11.491768] PPMC: exporting UxC digital inputs
    [ 11.491870] PPMC: exporting UxC digital outputs
    [ 11.491908] PPMC: exporting step generators
    [ 11.491945] PPMC: exporting encoder pins / params
    [ 11.492079] read cache bitmap: 00007fff
    [ 11.492080] write cache bitmap: ffffa000
    [ 11.492081] PPMC: slot 2: nothing detected at addr 2 reads 2f

    [ 11.492524] PPMC: slot 15: nothing detected at addr f reads ff
    [ 11.492569] PPMC: bus 0 complete

    I hope at least some of this was useful… It was horrible to find a working parallel port card.

  9. I reinstalled linuxcnc-2.7-wheezy.iso and here is the fresh output

    06:00.0 Parallel controller: NetMos Technology Device 9900 (prog-if 03 [IEEE1284])
    Subsystem: Device a000:2000
    Flags: fast devsel
    I/O ports at c000 [disabled] [size=8]
    I/O ports at c008 [disabled] [size=8]
    [virtual] Memory at fd100000 (32-bit, non-prefetchable) [size=4K]
    [virtual] Memory at fd101000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [78] Power Management version 3
    Capabilities: [80] Express Legacy Endpoint, MSI 00
    Capabilities: [100] Virtual Channel
    Capabilities: [800] Advanced Error Reporting

    i did not have a dmesg line like you so here im copying anything possibly relevant

    [ 1.246465] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
    ….
    [ 18.417741] lp: driver loaded but no devices found
    [ 18.485339] ppdev: user-space parallel port driver

    after reading this post i decided to try to enabled it (http://www.tldp.org/HOWTO/Serial-HOWTO-8.html#pci_enabled)

    setpci -d 9710:9900 command=101

    06:00.0 Parallel controller: NetMos Technology Device 9900 (prog-if 03 [IEEE1284])
    Subsystem: Device a000:2000
    Flags: fast devsel
    I/O ports at c000 [size=8]
    I/O ports at c008 [size=8]
    [virtual] Memory at fd100000 (32-bit, non-prefetchable) [size=4K]
    [virtual] Memory at fd101000 (32-bit, non-prefetchable) [size=4K]
    Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
    Capabilities: [78] Power Management version 3
    Capabilities: [80] Express Legacy Endpoint, MSI 00
    Capabilities: [100] Virtual Channel
    Capabilities: [800] Advanced Error Reporting

    however I go into stepperconfig with no success.

    I leave the default 0 port, 0x378, 0xc000, all the way to 0xc008 and nothing. no jog. I may just quit trying to do linuxcnc on this machine and purchase a machine that has a built in parallel port. Suggestions?

  10. I've not heard of needing to enable a port. If the right person read this the solution would probably be easy enough. Before buying a new computer, consider asking on the LinuxCNC forums. There are many people who are very knowledgeable. Also, if you're in the US, I'm willing to send you the PCIe card that worked for me originally, does work in LinuxCNC 2.7 with stepcon, but does not work with the Pico card. I.e., the card works fine in my setup as a non-EPP card… you're experience may be different though 🙁 If interested, send me your address private and pay it forward. 🙂

  11. Just an update. I couldn't create an account on the forums. It never send a confirmation email. I picked up a dell optiplex 920 for $20 and worked like a charm. Didn't need to install anything.

  12. Thanks for the help. I'll try the linuxcnc forums next. I've found a used machine for $50 I may pick it up and try with that one.

  13. Yes, as Kent says, the ONLY PCIe chips that I have found to work in EPP mode are the MOSCHIP MCS9900 and MCS9901. Most of the other chips work as SPP and PS/2 parallel ports, but their EPP mode is massively broken.

  14. Hi Jon, it's great to hear from you. Let's hope no one else has to go through testing parallel port cards.

    (For those who do not know, Jon owns Pico Systems and designed and sells a sophisticated control I/O board for LinuxCNC. Highly recommended.)

  15. If you need a PCIe parallel port for use with Pico Systems boards, I am now stocking known-working cards with the MCS9900/9901 chip as these seem to be the ONLY PCIe chips that work! Check pico-systems.com

    Jon

  16. Yes..WCH382 is not working with ubuntu 16.04 LTS and debian+Linuxcnc..I tried with 2 types of driver software but no use..One driver software supplied by manufacturer CD another one i got from Internet..you can't get pure parallel port out put to drive LinuxCnc..

Leave a Reply

Close Menu