DT3155 under Linux

Here at the MMT observatory, we use the DT3155 frame grabber for a variety of things (in particular as part of an astronomical acquisition TV system, and autoguider.). The DT3155 is a PCI bus frame grabber that accepts NTSC video signals and produces an 8 bit digitization of the signal at a 30 Hz rate. The video produced is a 640 by 480 array of 8 bit pixels (monochrome). The DT3155 transfers these into system memory via DMA and has no private memory. The hardware is made by Data Translation, and costs around $700 or so.

A driver has been written to run under Linux and the latest official release should be available from sourceforge.net. I received the driver from people at SAO (Smithsonian Astrophysical Observatory), and both John Roll (at SAO), Vijay Venkatraman (now at IBM), and myself (Tom Trebisky at MMTO) have fiddled with the driver. The copy we first received ran under 2.0.x kernels, and we worked to make it usable under 2.2.x kernels (and shortly thereafter found that a version that would accomplish that had been placed on sourceforge).

First, since the DT3155 needs a dedicated chunk of memory, go read about and build a kernel with the rambuff patch.

Now, you may need to fuss around a bit to get a unique IRQ. At this time, the driver is unwilling to share interrupts with other devices, and depending how your BIOS allocates PCI interrupts you may have some kind of hassle to deal with here. It is very helpful to look at /var/log/messages /proc/pci and /proc/interrupts to sort all this out.

At this time, the driver is pretty chatty when it starts up, and you get this long blather when it initializes:

May 18 12:09:43 pickaxe kernel: DT3155: Loading module...
May 18 12:09:43 pickaxe kernel: DT3155: Checking pci_index 0
May 18 12:09:43 pickaxe kernel: DT3155: Device number 1
May 18 12:09:43 pickaxe kernel: DT3155: Base address 0 for device is eb000000
May 18 12:09:43 pickaxe kernel: DT3155: New Base address 0 for device is eb000000
May 18 12:09:43 pickaxe kernel: DT3155: New logical address is xc8080000
May 18 12:09:43 pickaxe kernel: DT3155: IRQ is 10
May 18 12:09:43 pickaxe kernel: DT3155: Installing device 1 w/irq 10 and address 0xc8080000
May 18 12:09:43 pickaxe kernel: DT3155: Found 1 devices
May 18 12:09:43 pickaxe kernel: DT3155: Buffer base address is x3c4000
May 18 12:09:43 pickaxe kernel: DT3155: Total buffer length is  x200000
May 18 12:09:43 pickaxe kernel: Available buffers: 6
May 18 12:09:43 pickaxe kernel: Available buffers: 6
May 18 12:09:43 pickaxe kernel: Buffer : 400000
May 18 12:09:43 pickaxe kernel: Buffer : 44b000
May 18 12:09:43 pickaxe kernel: Buffer : 496000
May 18 12:09:43 pickaxe kernel: Buffer : 4e1000
May 18 12:09:43 pickaxe kernel: Buffer : 52c000
May 18 12:09:43 pickaxe kernel: Buffer : 577000
May 18 12:09:43 pickaxe kernel: Available buffers for device 0: 6
May 18 12:09:43 pickaxe kernel: DT3155: Device = 0; acq_mode = 1; continuous = 2; cols = 640; rows = 480;
May 18 12:09:43 pickaxe kernel:  DT3155: m_addr = 0x00400000; m_size = 1843200; state = 0; device_installed = 1
May 18 12:09:43 pickaxe kernel: DT3155: request_irq 10
May 18 12:09:43 pickaxe local: Starting DT3155 driver succeeded

When it was trying to share IRQ 9 with a 3c905 network card, it would give the following and then throw up its hands:

May 18 11:00:14 pickaxe kernel: DT3155: Loading module...
May 18 11:00:14 pickaxe kernel: DT3155: Checking pci_index 0
May 18 11:00:14 pickaxe kernel: DT3155: Device number 1
May 18 11:00:14 pickaxe kernel: DT3155: Base address 0 for device is eb000000
May 18 11:00:14 pickaxe kernel: DT3155: New Base address 0 for device is eb000000
May 18 11:00:14 pickaxe kernel: DT3155: New logical address is xc8082000
May 18 11:00:14 pickaxe kernel: DT3155: IRQ is 9
May 18 11:00:14 pickaxe kernel: DT3155: Installing device 1 w/irq 9 and address 0xc8082000
May 18 11:00:14 pickaxe kernel: DT3155: Found 1 devices
May 18 11:00:14 pickaxe kernel: DT3155: Buffer base address is x3c4000
May 18 11:00:14 pickaxe kernel: DT3155: Total buffer length is  x200000
May 18 11:00:14 pickaxe kernel: Available buffers: 6
May 18 11:00:14 pickaxe kernel: Available buffers: 6
May 18 11:00:14 pickaxe kernel: Buffer : 400000
May 18 11:00:14 pickaxe kernel: Buffer : 44b000
May 18 11:00:14 pickaxe kernel: Buffer : 496000
May 18 11:00:14 pickaxe kernel: Buffer : 4e1000
May 18 11:00:14 pickaxe kernel: Buffer : 52c000
May 18 11:00:14 pickaxe kernel: Buffer : 577000
May 18 11:00:14 pickaxe kernel: Available buffers for device 0: 6
May 18 11:00:14 pickaxe kernel: DT3155: Device = 0; acq_mode = 1; continuous = 2; cols = 640; rows = 480;
May 18 11:00:14 pickaxe kernel:  DT3155: m_addr = 0x00400000; m_size = 1843200; state = 0; device_installed = 1
May 18 11:00:14 pickaxe kernel: DT3155: request_irq 9
May 18 11:00:14 pickaxe kernel: DT3155: request_irq failed

Have any comments? Questions? Drop me a line!

Adventures in Computing / [email protected]