So Close- Just Need Help With Config and Firmware
- CalmofDawn
- Offline
- New Member
- Posts: 14
- Thank you received: 0
IO (on 7i42TA)
0 (X Step)
1 (X Dir)
6 (Y Step)
7 (Y Dir)
12 (Z Step)
13 (Z Dir)
I navigated to /lib/firmware/hm2/7i43-400/ and was able to locate those .BIT files. I also downloaded and extracted the package from Mesa at www.mesanet.com/software/parallel/7i43.zip
and successfully located .vhd files and more at /7i43/CONFIGS/...
I'm trying to understand the system architecture between LinuxCNC and the FPGA and having a hard time deducing important points. A few questions come to mind:
Is the FPGA just configured by the firmware files and nothing else? Are .PIN and .BIT the file extensions the firmware extensions for the FPGA? Is firmware what sets the pinouts and determines which pins are "connected" to the quadrature encoder and PWM generator modules? Or can I set, for example, the X axis step gen pin through some config file on the LinuxCNC side?
Are .vhd files the project file extensions to be used with Xilinx Webpack Tools to generate .PIN and .BIT files? Are the Mesa utilities a method to flash firmware files to the FPGA? Are there other methods?
Since I see pinout drop-down menus on the PNCCONF wizard, does that mean the FPGA is configured by not only firmware but also a configuration that LinuxCNC communicates over to the 7i43? Or are the drop-down menus just for naming pinouts on the LinuxCNC side and that's why the options on certain pins are limited to what the existing firmware on the FPGA provides module connections to?
Haha it's just overwhelming at first trying to deduce which operations are handled by which code and files at first glance. Clarification on this would be awesome.
Please Log in or Create an account to join the conversation.
Is the FPGA just configured by the firmware files and nothing else? Are .PIN and .BIT the file extensions the firmware extensions for the FPGA? Is firmware what sets the pinouts and determines which pins are "connected" to the quadrature encoder and PWM generator modules? Or can I set, for example, the X axis step gen pin through some config file on the LinuxCNC side?
The FPGA is configured by loading the .bit file. The I/O pinout is built into the FPGA configuration and cannot be changed except by using a different configuration. Any pin can be used as a GPIO pin however, this is one thing that can be changed dynamically.
.pin files are human readable text files that list the built in modules and pinout of a particular FPGA configuration.
Are .vhd files the project file extensions to be used with Xilinx Webpack Tools to generate .PIN and .BIT files? Are the Mesa utilities a method to flash firmware files to the FPGA? Are there other methods?
.vhd files are VHDL source files. Current Xilinx project files have a .xise extension. Note that with normal linuxcnc usage of the 7I43, the FPGA configuration is downloaded into the FPGA RAM every time LinuxCNC starts, no non-volatile flash memory writing is taking
place. The Mesa configuration utilities allow firmware downloading and Flash EEPROM FPGA configuration writing via USB or EPP.
Please Log in or Create an account to join the conversation.
It is a combination of the .BIT file and the configuration string passed to the driver. However, all the driver configuration string can do is turn "off" some of the modules and convert their pins to GPIO.Is the FPGA just configured by the firmware files and nothing else?
The .PIN file is purely for reading by humans. The computer doesn't use them. (And the XML files you may see are purely for use by the PNCConf Mesa-card configuration Wizard which is included with LinuxCNC)Are .PIN and .BIT the file extensions the firmware extensions for the FPGA? Is firmware what sets the pinouts and determines which pins are "connected" to the quadrature encoder and PWM generator modules? Or can I set, for example, the X axis step gen pin through some config file on the LinuxCNC side?
Which physical pin is which on the 7i43 header is hard-coded into the BIT file. However this is rarely a huge problem as they match the Mesa daughter cards and so generally speaking if you were to move a pin function to another physical location it would no longer drive the daughter card properly. Once you are in HAL you can do lots of other data manipulations with the signals.
Yes. They define the various modules, and then the build script assembles them. Typically to create a different layout of functions and pin arrangements you would only create a modified PIN_XXXXXX.vhd file.Are .vhd files the project file extensions to be used with Xilinx Webpack Tools to generate .PIN and .BIT files?
To complicate matters there are two ways to create firmwares, there is the Mesa way (that I don't understand) and the LinuxCNC way (that I do understand). The LinuxCNC build-system is here: git.linuxcnc.org/gitweb?p=hostmot2-firmware.git;a=summary and in that system you edit this file git.linuxcnc.org/gitweb?p=hostmot2-firmw...a660c71a48191b4d1a64 to say what firmwares you want to build (probably just your new one) then type "make". But I think that only works with an ancient version of the Xilinx tools.
"Mesaflash" is used to change the firmware on the 5i25 and 6i25 PCI cards.Are the Mesa utilities a method to flash firmware files to the FPGA? Are there other methods?
The 7i43 loses its program every time it is powered-down, so can't be "flashed" as such. What happens is that the LinuxCNC driver uploads the BIT file to the FPGA as part of the start-up process.
Please Log in or Create an account to join the conversation.
- CalmofDawn
- Offline
- New Member
- Posts: 14
- Thank you received: 0
High-level: The computer handles most of the information processing, the Mesa 7i43 is mainly a communication intermediary (hence "Anything I/O") between the computer and the driving electronics (motor drivers, switches, etc), the Mesa 7i42TA is a breakout board that contains protection circuitry for the application-side I/O pins of the 7i43 and also connects those pins to screw terminals for ease of custom wiring to the driving electronics.
High-level Diagram: Computer---7i43---7i42---Driving Electronics
The 7i42TA is mainly pin-to-pin connections with discrete protection components wired for each pin. Relatively simple.
The 7i43-U-4 uses the Xilinx Spartan III FPGA chip that operates at 50MHz frequency provided from an external onboard oscillator chip. This FPGA chip is programmable and is what provides the anything I/O function. The FPGA can thus be programmed to connect/communicate to various onboard modules such as the quadrature counter chips and PWM generator chips, or simply provide general purpose I/O as necessary. Programming the FPGA is about changing its pinout- which pins connect to which pins. The FPGA is programmed using code files that have the .BIT extension. For ease of development, .BIT files are complemented by .PIN files which are simply human-readable summaries of the .BIT file. .VHD files are VHDL source files, where VHDL is a standardized digital/logic hardware language ("Hardware Description Language"). These VHDL files can be processed through a build script to produce a .BIT file that works for the FPGA on the 7i43 board. The process of developing a .BIT file... I'll have to look into this in more detail.
The FPGA must be programmed each time it turns on. The FPGA can be programmed through EPP or USB. EPP configuration can be direct to the FPGA without intermediary chips, and uses the computer's parallel port. USB configuration involves a USB interface chip as an intermediary between the computer's USB port and the 7i43's FPGA chip. To subvert the need to program the FPGA from the computer upon start-up, the desired configuration can be stored on the 7i43's serial EEPROM (a part of the FPGA chip).
On the computer side, assuming a typical LinuxCNC-Ubuntu OS install, the default prepared .BIT configuration files for the Mesa boards are stored in /lib/firmware/hm2/... . These .BIT firmware files will called upon from the LinuxCNC configuration files (notably the .ini and .hal files) present in each LinuxCNC custom configuration folder /home/user/linuxcnc/configs/... (hence changing what .BIT file programs the FPGA can be as simple as changing the navigation path to a different .BIT file). These LinuxCNC configuration files draw information and call functions from all sorts of library and function files located elsewhere on the hard drive upon LinuxCNC start-up. For example, the configuration files call on HostMot2, a computer-side LinuxCNC driver that properly interfaces between the .BIT firmware file for the Mesa boards and the hardware abstraction layer for LinuxCNC.
A question- if I wanted to add on/off spindle control to the hm2_stepper LinuxCNC configuration, would I just have to edit the hm2_stepper.hal and 7i43-big.ini files? I guess what I would like to see is getting a HIGH signal from one of the screw terminals on the 7i42TA when I click on the spindle control button on the LinuxCNC Axis GUI. I tried making a LinuxCNC config with pncconf to test a spindle pin addition and it gave me a latency message upon LinuxCNC axis gui start-up for some reason. I assume there is some decent difference between the settings of the hm2_stepper config and the default-values pncconf config.
I checked out the hostmot2 doc and it's beginning to make a lot more sense than it did when I read it a while ago. I think I'm starting to get this.
Please Log in or Create an account to join the conversation.
A question- if I wanted to add on/off spindle control to the hm2_stepper LinuxCNC configuration, would I just have to edit the hm2_stepper.hal and 7i43-big.ini files? I guess what I would like to see is getting a HIGH signal from one of the screw terminals on the 7i42TA when I click on the spindle control button on the LinuxCNC Axis GUI.
This requires a line in the HAL file
net spindle-on motion.spindle-on => hm2_7i73.0.gpio-020-out
Here, "spindle-on" is a HAL 'signal' which can be any text label not otherwise in use.
motion.spindle-on is a HAL signal driven by the LinuxCNC 'motion' module: www.linuxcnc.org/docs/html/man/man9/motion.9.html
The => is ignored by the computer, but can be optionally added to aid human readability
hm2_7i73.0.gpio-020-out is the name of a GPIO pin in the 7i73. I guessed the name. You would need to choose a pin which is not otherwise in-use.
With LinuxCNC running you can do two things to determine the hardware and HAL pins of your system. Open a terminal window and type
dmesg
Then,
halcmd show pin *7i73*
Please Log in or Create an account to join the conversation.
- CalmofDawn
- Offline
- New Member
- Posts: 14
- Thank you received: 0
net spindle-on motion.spindle-enable => hm2_[HOSTMOT2](BOARD).0.gpio.040.out
NO_FORCE_HOMING = 1
I assume there's a step missing that will "connect"(?) the gpio.040 pin to the 7i43, and hence produce the right output on the 7i42TA.
Please Log in or Create an account to join the conversation.
something like:
setp hm2_7i43.0.gpio.040.is_output true
All GPIO pins start up in input mode and must be specifically switched to output mode
Also make sure that you wire output devices for active low actuation (the FPGA pins will be initially pulled high)
Please Log in or Create an account to join the conversation.
- CalmofDawn
- Offline
- New Member
- Posts: 14
- Thank you received: 0
To see how the wizard works with GPIO, I opened Applications>CNC>LinuxCNC Pncconf Wizard and made a configuration with many GPIO pins set to output and having the Spindle On function.
Then I navigated to /home/user/linuxcnc/configs/my_LinuxCNC_machine/my_LinuxCNC_machine.hal and opened in gedit to check the GPIO code. Expectedly, I got multiple lines like:
# --- SPINDLE-ENABLE ---
setp hm2_7i43.0.gpio.026.is_output true
net spindle-enable hm2_7i43.0.gpio.026.out
For LinuxCNC to run the pncconf-created config I had to modify the ioaddress and 16/32-bit epp setting like before. Near the beginning of the my_LinuxCNC_machine.hal file:
.....
.....
loadrt hm2_7i43 ioaddr=0xE010 epp_wide=0 config=".....
And then I ran this config with LinuxCNC, and the spindle button worked. That is: after the AXIS GUI popped up, I clicked the E-stop button to release, clicked the power on button beside it, then clicked the spindle clockwise button- and at that moment the screw terminal IO2 on the 7i42TA board changed its output from LOW (0V) to HIGH (~3-3.3V), as noticed by my oscope.
Glad the gpio code was working, I copy pasted the pncconf's GPIO lines to the hm2_stepper configuration at .../linuxcnc/configs/hm2_stepper/hm2-stepper.hal to below the Z [2] Axis section:
.....
.....
setp hm2_[HOSTMOT2](BOARD).0.stepgen.02.step_type 0
# --- SPINDLE-ENABLE ---
setp hm2_7i43.0.gpio.026.is_output true
net spindle-enable hm2_7i43.0.gpio.026.out
And to my surprise when LinuxCNC opened with the AXIS GUI there was no spindle button to press! So I compared the hm2-stepper.hal file with the my_LinuxCNC_machine.hal file and tried modifying the hm2-stepper.hal file, copy/pasting the spindle S section:
# ################
# Spindle
# ################
# --- SPINDLE-ENABLE ---
setp hm2_7i43.0.gpio.026.is_output true
net spindle-enable hm2_7i43.0.gpio.026.out
#*******************
# SPINDLE S
#*******************
# ---setup spindle control signals---
net spindle-vel-cmd-rps <= motion.spindle-speed-out-rps
net spindle-vel-cmd <= motion.spindle-speed-out
net spindle-enable <= motion.spindle-on
net spindle-cw <= motion.spindle-forward
net spindle-ccw <= motion.spindle-reverse
net spindle-brake <= motion.spindle-brake
net spindle-revs => motion.spindle-revs
net spindle-at-speed => motion.spindle-at-speed
net spindle-vel-fb => motion.spindle-speed-in
net spindle-index-enable <=> motion.spindle-index-enable
# ---Setup spindle at speed signals---
sets spindle-at-speed true
And when I ran the hm2_stepper config again, the AXIS GUI popped up with the spindle control buttons. So evidently the GUI adds buttons and additional interface when certain "net ....." lines of code are added to the configuration's hal file. And the output at screw terminal IO2 on the 7i42TA board worked properly as expected when clicking the spindle button on and off.
I wanted to check how the gpio pin numbers (ex. gpio.026, shown by the "halcmd show pin 7i43" command) correspond to the silkscreen IO numbers (ex. IO2, visible on 7i42TA board).
I have my 7i43-U-4 board connected via the P3 header to the 7i42TA.
I checked gpio pins 026, 027, and 028, and they corresponded to IO2, IO3, and IO4 on the 7i42TA. This indicates that the 24 IO pins (0-23) on the 7i42TA board are connected to the 24 gpio pins 024, 025, 026, ..... , 046 as viewable with the "halcmd show pin *7i43*" command.
This also implies that, if I had a second 7i42TA connected to the P4 header of the 7i43, the 24 IO pins (0-23) on that 7i42TA would correspond to the 24 gpio pins 000, 001, 002, ..... , 023.
In other words:
The 7i43 has 48 gpio pins, numbered 000 through 047. The first set of 24 gpio pins (000 - 023) are connected to the 7i43's P4 header. The second set of 24 gpio pins (024 - 047) are connected to the 7i43's P3 header.
When the 7i43's P3 and P4 headers are each connected to a 7i42TA, the P3 7i42TA will correspond its IO0 - IO23 to 7i43 gpio pins 024 - 047, and the P4 7i42TA will correspond its IO0 - IO23 to 7i43 gpio pins 000 - 023. Again emphasis on the command:
halcmd show pin *7i43*
To see the gpio pins when linuxcnc is running.
Thanks guys, another problem solved.
Please Log in or Create an account to join the conversation.