Uncertain whether to open a new topic, different board but SPI integration challenge.
I am working on integration with RPi3. I tried the hm2_rpspi option without success. I created a new pinout for dual MX4660 configuration and first verified the new .bit file with an EPP image. Loaded the SPI image and discovered mesaflash didn't support the RPi. The challenge is the RPi spidev driver only supports 8-bit word transfers. Long story short I added code to recognize the SPI 32-bit word set failure, fallback to 8-bit transfers and do the necessary byte reordering. Good news is I have a functioning mesaflash utility (at least for readhmid).
I then ported the mesaflash logic to hm2_spi.c. Some success but consistent failure after the board is discovered. Just looking for guidance as to what I missed.
I tracked the error message down into tram.c and found the source of the trouble is the hm2->llio->send_queued_writes(hm2->llio) call from hm2_finish_write() ends up invoking hm2_spi.c::do_pending() with (nbuf == 0) so we get an immediate return 0 and the failure message.
Thank you, Joe
Here's the console output capturing stdin & stderr:
Code:
LINUXCNC - 2.8.0~pre1
Machine configuration directory is '/home/pi/linuxcnc-dev/configs/by_interface/mesa/hm2-stepper'
Machine configuration file is '7i90.ini'
Starting LinuxCNC...
Found file(REL): ./hm2-stepper.hal
Note: Using POSIX realtime
hm2: loading Mesa HostMot2 driver version 0.15
probe 24000000
fall back to 8-bit xfer
hm2/hm2_7i90.0: 72 I/O Pins used:
hm2/hm2_7i90.0: IO Pin 000 (P1-01): IOPort
hm2/hm2_7i90.0: IO Pin 001 (P1-03): StepGen #0, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 002 (P1-05): StepGen #0, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 003 (P1-07): StepGen #1, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 004 (P1-09): StepGen #1, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 005 (P1-11): StepGen #2, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 006 (P1-13): StepGen #2, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 007 (P1-15): StepGen #3, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 008 (P1-17): StepGen #3, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 009 (P1-19): IOPort
hm2/hm2_7i90.0: IO Pin 010 (P1-21): IOPort
hm2/hm2_7i90.0: IO Pin 011 (P1-23): IOPort
hm2/hm2_7i90.0: IO Pin 012 (P1-25): IOPort
hm2/hm2_7i90.0: IO Pin 013 (P1-27): PWMGen #0, pin Out0 (PWM or Up) (Output)
hm2/hm2_7i90.0: IO Pin 014 (P1-29): IOPort
hm2/hm2_7i90.0: IO Pin 015 (P1-31): StepGen #4, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 016 (P1-33): IOPort
hm2/hm2_7i90.0: IO Pin 017 (P1-35): StepGen #5, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 018 (P1-37): StepGen #5, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 019 (P1-39): StepGen #6, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 020 (P1-41): StepGen #6, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 021 (P1-43): IOPort
hm2/hm2_7i90.0: IO Pin 022 (P1-45): IOPort
hm2/hm2_7i90.0: IO Pin 023 (P1-47): PWMGen #1, pin Out0 (PWM or Up) (Output)
hm2/hm2_7i90.0: IO Pin 024 (P2-01): IOPort
hm2/hm2_7i90.0: IO Pin 025 (P2-03): StepGen #7, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 026 (P2-05): StepGen #7, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 027 (P2-07): StepGen #8, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 028 (P2-09): StepGen #8, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 029 (P2-11): StepGen #9, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 030 (P2-13): StepGen #9, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 031 (P2-15): StepGen #10, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 032 (P2-17): StepGen #10, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 033 (P2-19): IOPort
hm2/hm2_7i90.0: IO Pin 034 (P2-21): IOPort
hm2/hm2_7i90.0: IO Pin 035 (P2-23): IOPort
hm2/hm2_7i90.0: IO Pin 036 (P2-25): IOPort
hm2/hm2_7i90.0: IO Pin 037 (P2-27): PWMGen #2, pin Out0 (PWM or Up) (Output)
hm2/hm2_7i90.0: IO Pin 038 (P2-29): IOPort
hm2/hm2_7i90.0: IO Pin 039 (P2-31): StepGen #11, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 040 (P2-33): IOPort
hm2/hm2_7i90.0: IO Pin 041 (P2-35): StepGen #12, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 042 (P2-37): StepGen #12, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 043 (P2-39): StepGen #13, pin Step (Output)
hm2/hm2_7i90.0: IO Pin 044 (P2-41): StepGen #13, pin Direction (Output)
hm2/hm2_7i90.0: IO Pin 045 (P2-43): IOPort
hm2/hm2_7i90.0: IO Pin 046 (P2-45): IOPort
hm2/hm2_7i90.0: IO Pin 047 (P2-47): PWMGen #3, pin Out0 (PWM or Up) (Output)
hm2/hm2_7i90.0: IO Pin 048 (P3-01): IOPort
hm2/hm2_7i90.0: IO Pin 049 (P3-03): IOPort
hm2/hm2_7i90.0: IO Pin 050 (P3-05): IOPort
hm2/hm2_7i90.0: IO Pin 051 (P3-07): IOPort
hm2/hm2_7i90.0: IO Pin 052 (P3-09): IOPort
hm2/hm2_7i90.0: IO Pin 053 (P3-11): IOPort
hm2/hm2_7i90.0: IO Pin 054 (P3-13): IOPort
hm2/hm2_7i90.0: IO Pin 055 (P3-15): IOPort
hm2/hm2_7i90.0: IO Pin 056 (P3-17): IOPort
hm2/hm2_7i90.0: IO Pin 057 (P3-19): IOPort
hm2/hm2_7i90.0: IO Pin 058 (P3-21): IOPort
hm2/hm2_7i90.0: IO Pin 059 (P3-23): IOPort
hm2/hm2_7i90.0: IO Pin 060 (P3-25): IOPort
hm2/hm2_7i90.0: IO Pin 061 (P3-27): IOPort
hm2/hm2_7i90.0: IO Pin 062 (P3-29): IOPort
hm2/hm2_7i90.0: IO Pin 063 (P3-31): IOPort
hm2/hm2_7i90.0: IO Pin 064 (P3-33): IOPort
hm2/hm2_7i90.0: IO Pin 065 (P3-35): IOPort
hm2/hm2_7i90.0: IO Pin 066 (P3-37): IOPort
hm2/hm2_7i90.0: IO Pinhm2/hm2_7i90.0: error finishing write! iter=2)
Unexpected realtime delay on task 0 with period 1000000
This Message will only display once per session.
Run the Latency Test and resolve before continuing.
Missing <max linear speed> specifier
See the 'INI Configuration' documents
Shutting down and cleaning up LinuxCNC...
task: 173 cycles, min=0.000033, max=0.030282, avg=0.008540, 0 latency excursions (> 10x expected cycle time of 0.010000s)
hm2/hm2_7i90.0: error finishing write! iter=2)
Unexpected realtime delay on task 0 with period 1000000
This Message will only display once per session.
Run the Latency Test and resolve before continuing.
067 (P3-39): IOPort
hm2/hm2_7i90.0: IO Pin 068 (P3-41): IOPort
hm2/hm2_7i90.0: IO Pin 069 (P3-43): IOPort
hm2/hm2_7i90.0: IO Pin 070 (P3-45): IOPort
hm2/hm2_7i90.0: IO Pin 071 (P3-47): IOPort
hm2/hm2_7i90.0: registered
nothing to process!!!
hm2: unloading
Note: Using POSIX realtime