More than one frame grabber in one system

mvDELTA, mvGAMMA-G, mvSIGMA-SLC, mvSIGMA-SLG, mvSIGMA-SQ, mvTITAN-C16, mvTITAN-C8, mvTITAN-CL, mvTITAN-DIG, mvTITAN-G1, mvTITAN-RGB/G4, pcIMAGE-SC, pcIMAGE-SDIG, pcIMAGE-SG/SGVS, pcIMAGE-SRGB

It is theoretically possible to plug as much Frame Grabber as available PCI slots in a system. These boards can be of the same kind or not.

If there aren"t of the same kind each hardware can be opened without any further setting. The driver itself identifies automatically the right board type by looking for the right Vendor ID (VNID) and Device ID (DVID) of the board"s DMA controller.

The Vendor ID und Device IDs of our hardware:
mvDELTA, mvSIGMA-Serie: VNID:109E DVID:0350 (BT848) or VNID:109E DVID:036E (BT878)
pcIMAGE-SC, pcIMAGE-SG/SGVS, pcIMAGE-SRGB: VNID:8086 DVID:1223
pcIMAGE-SDIG: VNID:10B5 DVID:9080
mvTITAN-Serie: VNID:1131 DVID:5400 (TM 1100) or VNID:1131 DVID:5402 (TM1300)

Are there Frame Grabbers installed which have the same DMA controller on board (like mvSIGMA line or mvTITAN line) it is needed to define which of them has be opened.

For Windows and for MS-DOS this definition has to be done in the used configuration file (INI-File, e.g. grabber.ini) or in the string table.
For Linux there is also the possibilty of using a single INI-File (see below).

For doing this you have to create one configuration file (e.g.: mvTITANDIG_1.ini, mvTITANDIG_2.ini, etc.) or string table for each Frame Grabber which has to be opened. Each Frame Grabber has to be opened seperatly with its corresponding INI-File.
The Definition is done by the command "SelBoard".
Extract from an INI-File:
...
[TITAN]
...
SelBoard 0
...
InitBoard
...

"SelBoard 0" opens the first Frame Grabber of the chosen type the driver founds in the PCI bus table. "SelBoard 1" opens the second one and so on. The maximum number of boards in one system is only limited by the amount of available PCI bus slots and the available DMA transfer bandwitdh.

Now you get one device handle for each board with the command mvOpenDevice() corresponding to the used INI-File. With this the used SDK command is executed only for the frame grabber represented by the device handle.

Linux INI-Files
The MATRIX VISION Linux driver also has a special function: it is possible to work with a single INI-File for several framegrabbers at once. You just need to add additional sections to the INI-File. Each section should start with a header which also can include an additional number. This number is equivalent to the "Minor Device Number" of the device node in the "/dev" directory.

[TITAN]
...
SelBoard 0
...
InitBoard
...

[TITAN.1]
...
SelBoard 1
...
InitBoard
...

[TITAN.2]
...
SelBoard 2
...
InitBoard
...

When using the function mvOpenDevice() you can now pass the INI-File and the section which contains the parameters for the chosen framegrabber. N.B. The name of the section should be passed as type CHAR** in the 2nd. parameter i.e. you should use a pointer to a string (array of CHAR).

int error;
CHAR inifile[80] = "myinifile.ini";
CHAR section1[80] = "TITAN";
CHAR **sectionname1 = (CHAR **)§ion1;
CHAR section2[80] = "TITAN.1";
CHAR **sectionname2 = (CHAR **)§ion2;

mvOpenDevice (inifile, sectionname1, &error, NULL);
...
mvOpenDevice (inifile, sectionname2, &error, NULL);

With older driver versions (older than middle of 2001) this identification can not be done by the command "SelBoard" but has to be done by using the function "SetMemBase". The method is the same as before.

For the identification it is needed to know the bridge and slot numbers for the device to open assigned from the motherboards BIOS. The determination of these numbers can be done by using the tool PCISCAN.EXE on the driver CD-ROM or without any tool with a LOG file. For this a program must be used which creates a LOG file like MVconfig.exe. It has to be started once. Open and close one of the installed boards. In the LOG file you will find the following table.

Sample:

****** PCI-Slot Information *******
BN BR SL VNID DVID RVID CMDR BASEADDR ROMADDR IRQ L LAT
--------------------------------------------------------------
0 00 00 8086 7190 0003 0006 F8000008 00000000 0 0 40
1 00 01 8086 7191 0003 001F 00000000 00000000 0 0 40
2 00 07 8086 7110 0002 000F 00000000 00000000 0 0 0
3 00 0F 10B8 0005 0008 0007 0000E801 FEBE0000 11 1 40
febff000
4 00 12 109E 0350 0012 0106 FD9FF008 00000000 9 1 40
5 00 13 109E 0350 0012 0106 FF9FF008 00000000 10 1 40
6 01 00 102B 0525 0004 0007 F2000008 FEAE0000 11 1 40
feafc000
fe000000

The lines corresponding to the Frame Grabbers can be found by looking form the VNID and DVID in this table. The second and third column gives you the brigde number (BR) and the slot number (SL) of the devices. With these numbers you can call the SetMemBase command in the INI File as described in the manual.

Sample:
...
[MVSL]
...
SetMemBase 0x12 0 0 // opens first SLx, no baseaddress changed (recommended)
...
InitBoard
...

...
[MVSL]
...
SetMemBase 0x13 0 0 // opens second SLx, no baseaddress changed (recommended)
...
InitBoard
...

Linux: Other Changes

There are at least 2 other additional sources of problems for Linux users:

  • The kernel must be started with an additional "mem = xxxxM" parameter to reserve memory for the linear DMA buffer (see Linux README file). If you intend to use more than one grabber in a single computer you must ensure that this buffer has been chosen to be large enough. e.g. the mvTITAN grabbers usually need 4 MB per Grabber. Therefore you need to reserve at least 12 MB for 3 grabbers.

  • It is possible that you will need to create more device nodes in the directory "/dev". Normally 4 such files are created by the "mvload" script. If you intend to use more than 4 grabbers in one computer then you will have to create new device files using "mknod"(a one-off operation) or change the "mvload" script.N.B. Each new file must have a different minor device number e.g. use minor = 4 for the 5th grabber and minor = 6 for the 6th grabber. The major device number should be the same as for the other, automatically created files.

Go back