Some notes on setting up the Mesa 5i25 FPGA card (the manual) with the 7i76 daughter card (the manual) inside a new-to-me off-lease Dell Optiplex 760…
First up: note that Mesa uses a capital I (“eye”) in the part numbers, a decision which they’ve surely had plenty of time to regret, as many common fonts exhibit nearly identical capital-I and digit-1 characters.
The 7i76 connects to the 5i25 in the PC through a Mesa-supplied IEEE-1284 printer cable. I cobbled up a 24 VDC power supply (which I’ll eventually be using for the M2 motors) to provide “field power” and let the firmware identify the daughtercard:

The default jumper positions on both cards work fine.
The unconnected stepper driver brick and motor will serve as a simple demonstration after I’ve built the Eagle parts to represent the 5i25’s components. However, the first demo of any new hardware must be a blinking LED.
To see whether the cards work and are detected, load the hostmot2 drivers in halrun and dump all the information:
halrun
halcmd: loadrt hostmot2
halcmd: loadrt hm2_pci
halcmd: show all
Loaded HAL Components:
ID Type Name PID State
5 RT hm2_pci ready
3 User halcmd5010 5010 ready
4 RT hostmot2 ready
Component Pins:
Owner Type Dir Value Name
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-00
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-00-not
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-01
... snippage ...
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-30
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-30-not
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-31
5 bit OUT FALSE hm2_5i25.0.7i76.0.0.input-31-not
5 bit IN FALSE hm2_5i25.0.7i76.0.0.output-00
5 bit IN FALSE hm2_5i25.0.7i76.0.0.output-01
... snippage ...
5 bit IN FALSE hm2_5i25.0.7i76.0.0.output-15
5 bit IN FALSE hm2_5i25.0.7i76.0.0.spindir
5 bit IN FALSE hm2_5i25.0.7i76.0.0.spinena
5 float IN 0 hm2_5i25.0.7i76.0.0.spinout
5 s32 OUT 0 hm2_5i25.0.encoder.00.count
5 s32 OUT 0 hm2_5i25.0.encoder.00.count-latched
5 bit I/O FALSE hm2_5i25.0.encoder.00.index-enable
5 bit IN FALSE hm2_5i25.0.encoder.00.latch-enable
5 bit IN FALSE hm2_5i25.0.encoder.00.latch-polarity
5 float OUT 0 hm2_5i25.0.encoder.00.position
5 float OUT 0 hm2_5i25.0.encoder.00.position-latched
5 s32 OUT 0 hm2_5i25.0.encoder.00.rawcounts
5 s32 OUT 0 hm2_5i25.0.encoder.00.rawlatch
5 bit IN FALSE hm2_5i25.0.encoder.00.reset
5 float OUT 0 hm2_5i25.0.encoder.00.velocity
5 s32 OUT 0 hm2_5i25.0.encoder.01.count
... snippage ...
5 float OUT 0 hm2_5i25.0.encoder.01.velocity
5 bit OUT FALSE hm2_5i25.0.gpio.000.in
5 bit OUT TRUE hm2_5i25.0.gpio.000.in_not
5 bit OUT FALSE hm2_5i25.0.gpio.001.in
... snippage ...
5 bit OUT TRUE hm2_5i25.0.gpio.032.in
5 bit OUT FALSE hm2_5i25.0.gpio.032.in_not
5 bit OUT TRUE hm2_5i25.0.gpio.033.in
5 bit OUT FALSE hm2_5i25.0.gpio.033.in_not
5 bit IN FALSE hm2_5i25.0.led.CR01
5 bit IN FALSE hm2_5i25.0.led.CR02
5 u32 IN 0x00000000 hm2_5i25.0.sserial.channel
5 u32 IN 0x00000000 hm2_5i25.0.sserial.parameter
5 u32 IN 0x00000000 hm2_5i25.0.sserial.port
5 u32 OUT 0x00000000 hm2_5i25.0.sserial.port-0.fault-count
5 u32 OUT 0x00000000 hm2_5i25.0.sserial.port-0.port_state
5 bit IN TRUE hm2_5i25.0.sserial.port-0.run
5 bit IN FALSE hm2_5i25.0.sserial.read
5 u32 OUT 0x00000000 hm2_5i25.0.sserial.state
5 u32 IN 0x00000000 hm2_5i25.0.sserial.value
5 bit IN FALSE hm2_5i25.0.sserial.write
5 bit IN FALSE hm2_5i25.0.stepgen.00.control-type
5 s32 OUT 0 hm2_5i25.0.stepgen.00.counts
5 float OUT 0 hm2_5i25.0.stepgen.00.dbg_err_at_match
5 float OUT 0 hm2_5i25.0.stepgen.00.dbg_ff_vel
5 float OUT 0 hm2_5i25.0.stepgen.00.dbg_pos_minus_prev_
5 float OUT 0 hm2_5i25.0.stepgen.00.dbg_s_to_match
5 s32 OUT 0 hm2_5i25.0.stepgen.00.dbg_step_rate
5 float OUT 0 hm2_5i25.0.stepgen.00.dbg_vel_error
5 bit IN FALSE hm2_5i25.0.stepgen.00.enable
5 float IN 0 hm2_5i25.0.stepgen.00.position-cmd
5 float OUT 0 hm2_5i25.0.stepgen.00.position-fb
5 float IN 0 hm2_5i25.0.stepgen.00.velocity-cmd
5 float OUT 0 hm2_5i25.0.stepgen.00.velocity-fb
5 bit IN FALSE hm2_5i25.0.stepgen.01.control-type
... snippage ...
5 float OUT 0 hm2_5i25.0.stepgen.09.velocity-fb
5 bit I/O FALSE hm2_5i25.0.watchdog.has_bit
... snippage ...
Parameters:
Owner Type Dir Value Name
5 bit RW FALSE hm2_5i25.0.7i76.0.0.output-00-invert
5 bit RW FALSE hm2_5i25.0.7i76.0.0.output-01-invert
... snippage ...
5 bit RW FALSE hm2_5i25.0.7i76.0.0.output-15-invert
5 u32 RO 0x100000A5 hm2_5i25.0.7i76.0.0.serial-number
5 bit RW FALSE hm2_5i25.0.7i76.0.0.spindir-invert
5 bit RW FALSE hm2_5i25.0.7i76.0.0.spinena-invert
5 float RW 100 hm2_5i25.0.7i76.0.0.spinout-maxlim
5 float RW 0 hm2_5i25.0.7i76.0.0.spinout-minlim
5 float RW 100 hm2_5i25.0.7i76.0.0.spinout-scalemax
5 u32 RO 0x00000000 hm2_5i25.0.7i76.0.0.status
5 bit RW FALSE hm2_5i25.0.encoder.00.counter-mode
5 bit RW TRUE hm2_5i25.0.encoder.00.filter
5 bit RW FALSE hm2_5i25.0.encoder.00.index-invert
5 bit RW FALSE hm2_5i25.0.encoder.00.index-mask
5 bit RW FALSE hm2_5i25.0.encoder.00.index-mask-invert
5 float RW 1 hm2_5i25.0.encoder.00.scale
5 float RW 0.5 hm2_5i25.0.encoder.00.vel-timeout
5 bit RW FALSE hm2_5i25.0.encoder.01.counter-mode
... snippage ...
5 float RW 0.5 hm2_5i25.0.encoder.01.vel-timeout
5 bit RW FALSE hm2_5i25.0.gpio.000.invert_output
5 bit RW FALSE hm2_5i25.0.gpio.000.is_opendrain
5 bit RW FALSE hm2_5i25.0.gpio.001.invert_output
... snippage ...
5 bit RW FALSE hm2_5i25.0.gpio.030.invert_output
5 bit RW FALSE hm2_5i25.0.gpio.030.is_opendrain
5 bit RW FALSE hm2_5i25.0.gpio.030.is_output
5 bit RW FALSE hm2_5i25.0.io_error
5 s32 RO 0 hm2_5i25.0.pet_watchdog.time
5 s32 RW 0 hm2_5i25.0.pet_watchdog.tmax
5 s32 RO 0 hm2_5i25.0.read.time
5 s32 RW 0 hm2_5i25.0.read.tmax
5 s32 RO 0 hm2_5i25.0.read_gpio.time
5 s32 RW 0 hm2_5i25.0.read_gpio.tmax
5 u32 RW 0x00000001 hm2_5i25.0.sserial.port-0.fault-dec
5 u32 RW 0x0000000A hm2_5i25.0.sserial.port-0.fault-inc
5 u32 RW 0x000000C8 hm2_5i25.0.sserial.port-0.fault-lim
5 u32 RW 0x00077FE2 hm2_5i25.0.stepgen.00.dirhold
5 u32 RW 0x00077FE2 hm2_5i25.0.stepgen.00.dirsetup
5 float RW 1 hm2_5i25.0.stepgen.00.maxaccel
5 float RW 0 hm2_5i25.0.stepgen.00.maxvel
5 float RW 1 hm2_5i25.0.stepgen.00.position-scale
5 u32 RW 0x00000000 hm2_5i25.0.stepgen.00.step_type
5 u32 RW 0x00077FE2 hm2_5i25.0.stepgen.00.steplen
5 u32 RW 0x00077FE2 hm2_5i25.0.stepgen.00.stepspace
5 u32 RW 0x00077FE2 hm2_5i25.0.stepgen.01.dirhold
... snippage ...
5 u32 RW 0x00077FE2 hm2_5i25.0.stepgen.09.stepspace
5 u32 RW 0x004C4B40 hm2_5i25.0.watchdog.timeout_ns
5 s32 RO 0 hm2_5i25.0.write.time
5 s32 RW 0 hm2_5i25.0.write.tmax
5 s32 RO 0 hm2_5i25.0.write_gpio.time
5 s32 RW 0 hm2_5i25.0.write_gpio.tmax
Parameter Aliases:
Alias Original Name
Exported Functions:
Owner CodeAddr Arg FP Users Name
00005 fc3d2582 f1b17000 NO 0 hm2_5i25.0.pet_watchdog
00005 fc3c49dc f1b17000 YES 0 hm2_5i25.0.read
00005 fc3c4906 f1b17000 YES 0 hm2_5i25.0.read_gpio
00005 fc3c4936 f1b17000 YES 0 hm2_5i25.0.write
00005 fc3c48d6 f1b17000 YES 0 hm2_5i25.0.write_gpio
... snippage ...
Extract the 5i25 pin assignments from the kernel log file:
dmesg | grep hm2
Which produces this:
[ed@lcnc-m2 LinuxCNC for M2]$ dmesg | grep hm2 [ 7299.887856] hm2: loading Mesa HostMot2 driver version 0.15 [ 7407.514601] hm2_pci: loading Mesa AnyIO HostMot2 driver version 0.7 [ 7407.514631] hm2_pci 0000:04:02.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18 [ 7407.514634] hm2_pci: discovered 5i25 at 0000:04:02.0 [ 7407.514656] hm2: no firmware specified in config modparam! the board had better have firmware configured already, or this won't work [ 7407.515018] hm2/hm2_5i25.0: Smart Serial Firmware Version 38 [ 7407.632326] hm2/hm2_5i25.0: 34 I/O Pins used: [ 7407.632329] hm2/hm2_5i25.0: IO Pin 000 (P3-01): StepGen #0, pin Direction (Output) [ 7407.632331] hm2/hm2_5i25.0: IO Pin 001 (P3-14): StepGen #0, pin Step (Output) [ 7407.632334] hm2/hm2_5i25.0: IO Pin 002 (P3-02): StepGen #1, pin Direction (Output) [ 7407.632336] hm2/hm2_5i25.0: IO Pin 003 (P3-15): StepGen #1, pin Step (Output) [ 7407.632338] hm2/hm2_5i25.0: IO Pin 004 (P3-03): StepGen #2, pin Direction (Output) [ 7407.632340] hm2/hm2_5i25.0: IO Pin 005 (P3-16): StepGen #2, pin Step (Output) [ 7407.632343] hm2/hm2_5i25.0: IO Pin 006 (P3-04): StepGen #3, pin Direction (Output) [ 7407.632345] hm2/hm2_5i25.0: IO Pin 007 (P3-17): StepGen #3, pin Step (Output) [ 7407.632347] hm2/hm2_5i25.0: IO Pin 008 (P3-05): StepGen #4, pin Direction (Output) [ 7407.632349] hm2/hm2_5i25.0: IO Pin 009 (P3-06): StepGen #4, pin Step (Output) [ 7407.632352] hm2/hm2_5i25.0: IO Pin 010 (P3-07): Smart Serial Interface #0, pin TxData0 (Output) [ 7407.632354] hm2/hm2_5i25.0: IO Pin 011 (P3-08): Smart Serial Interface #0, pin RxData0 (Input) [ 7407.632356] hm2/hm2_5i25.0: IO Pin 012 (P3-09): IOPort [ 7407.632358] hm2/hm2_5i25.0: IO Pin 013 (P3-10): IOPort [ 7407.632360] hm2/hm2_5i25.0: IO Pin 014 (P3-11): Encoder #0, pin Index (Input) [ 7407.632362] hm2/hm2_5i25.0: IO Pin 015 (P3-12): Encoder #0, pin B (Input) [ 7407.632364] hm2/hm2_5i25.0: IO Pin 016 (P3-13): Encoder #0, pin A (Input) [ 7407.632367] hm2/hm2_5i25.0: IO Pin 017 (P2-01): StepGen #5, pin Direction (Output) [ 7407.632369] hm2/hm2_5i25.0: IO Pin 018 (P2-14): StepGen #5, pin Step (Output) [ 7407.632371] hm2/hm2_5i25.0: IO Pin 019 (P2-02): StepGen #6, pin Direction (Output) [ 7407.632373] hm2/hm2_5i25.0: IO Pin 020 (P2-15): StepGen #6, pin Step (Output) [ 7407.632376] hm2/hm2_5i25.0: IO Pin 021 (P2-03): StepGen #7, pin Direction (Output) [ 7407.632378] hm2/hm2_5i25.0: IO Pin 022 (P2-16): StepGen #7, pin Step (Output) [ 7407.632380] hm2/hm2_5i25.0: IO Pin 023 (P2-04): StepGen #8, pin Direction (Output) [ 7407.632382] hm2/hm2_5i25.0: IO Pin 024 (P2-17): StepGen #8, pin Step (Output) [ 7407.632385] hm2/hm2_5i25.0: IO Pin 025 (P2-05): StepGen #9, pin Direction (Output) [ 7407.632387] hm2/hm2_5i25.0: IO Pin 026 (P2-06): StepGen #9, pin Step (Output) [ 7407.632389] hm2/hm2_5i25.0: IO Pin 027 (P2-07): IOPort [ 7407.632391] hm2/hm2_5i25.0: IO Pin 028 (P2-08): IOPort [ 7407.632392] hm2/hm2_5i25.0: IO Pin 029 (P2-09): IOPort [ 7407.632394] hm2/hm2_5i25.0: IO Pin 030 (P2-10): IOPort [ 7407.632396] hm2/hm2_5i25.0: IO Pin 031 (P2-11): Encoder #1, pin Index (Input) [ 7407.632398] hm2/hm2_5i25.0: IO Pin 032 (P2-12): Encoder #1, pin B (Input) [ 7407.632401] hm2/hm2_5i25.0: IO Pin 033 (P2-13): Encoder #1, pin A (Input) [ 7407.632443] hm2/hm2_5i25.0: registered [ 7407.632445] hm2_5i25.0: initialized AnyIO board at 0000:04:02.0 [ 7487.136417] hm2_5i25.0: dropping AnyIO board at 0000:04:02.0 [ 7487.136422] hm2/hm2_5i25.0: unregistered [ 7487.136440] hm2_pci 0000:04:02.0: PCI INT A disabled [ 7487.136459] hm2_pci: driver unloaded [ 7487.138640] hm2: unloading
I am, perhaps, easily confused, but it took me a while to realize those pin assignments apply to the 5i25 back panel and on-card connectors, not the 7i76 daughter card’s screw terminals. Yeah, it says 5i25 right there in the dump, but …
The Fine 7i76 Manual gives the 7i76 pin connections, so they’re not even slightly hidden. [sigh]
Next, to see if it actually works …