Custom firmware for 5i25 with BISSTag

More
7 years 5 months ago #134698 by kata
I'm doing cusfom vhdl files for mesa cards and I have problem with BISSTag.
When I wtrite compilated bitfile with mesaflash to 5i25 card, pins determinated as BISSDataPin and BISSDataClock are unknown-gtag instead.

My code:
Code:
library IEEE; use IEEE.std_logic_1164.all; -- defines std_logic types use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; -- Copyright (C) 2007, Peter C. Wallace, Mesa Electronics -- http://www.mesanet.com -- -- This program is is licensed under a disjunctive dual license giving you -- the choice of one of the two following sets of free software/open source -- licensing terms: -- -- * GNU General Public License (GPL), version 2.0 or later -- * 3-clause BSD License -- -- -- The GNU GPL License: -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -- -- -- The 3-clause BSD License: -- -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions -- are met: -- -- * Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- -- * Redistributions in binary form must reproduce the above -- copyright notice, this list of conditions and the following -- disclaimer in the documentation and/or other materials -- provided with the distribution. -- -- * Neither the name of Mesa Electronics nor the names of its -- contributors may be used to endorse or promote products -- derived from this software without specific prior written -- permission. -- -- -- Disclaimer: -- -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -- COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -- ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- POSSIBILITY OF SUCH DAMAGE. -- use work.IDROMConst.all; package BISS_5i25 is constant ModuleID : ModuleIDType :=( (HM2DPLLTag, x"00", ClockLowTag, x"01", HM2DPLLBaseRateAddr&PadT, HM2DPLLNumRegs, x"00", HM2DPLLMPBitMask), (WatchDogTag, x"00", ClockLowTag, x"01", WatchDogTimeAddr&PadT, WatchDogNumRegs, x"00", WatchDogMPBitMask), (IOPortTag, x"00", ClockLowTag, x"02", PortAddr&PadT, IOPortNumRegs, x"00", IOPortMPBitMask), (BISSTag, x"00", ClockHighTag, x"05", BISSDataAddr&PadT, BISSNumRegs, x"00", BISSMPBitMask), (SSerialTag, x"00", ClockLowTag, x"01", SSerialCommandAddr&PadT, SSerialNumRegs, x"10", SSerialMPBitMask), (LEDTag, x"00", ClockLowTag, x"01", LEDAddr&PadT, LEDNumRegs, x"00", LEDMPBitMask), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"), (NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000") ); constant PinDesc : PinDescType :=( -- Base func sec unit sec func sec pin -- P3 DB25 IOPortTag & x"00" & BISSTag & BISSDataPin, -- I/O 00 PIN 1 IOPortTag & x"00" & BISSTag & BISSClkPin, -- I/O 01 PIN 14 IOPortTag & x"01" & BISSTag & BISSDataPin, -- I/O 02 PIN 2 IOPortTag & x"01" & BISSTag & BISSClkPin, -- I/O 03 PIN 15 IOPortTag & x"02" & BISSTag & BISSDataPin, -- I/O 04 PIN 3 IOPortTag & x"02" & BISSTag & BISSClkPin, -- I/O 05 PIN 16 IOPortTag & x"03" & BISSTag & BISSDataPin, -- I/O 06 PIN 4 IOPortTag & x"03" & BISSTag & BISSClkPin, -- I/O 07 PIN 17 IOPortTag & x"04" & BISSTag & BISSDataPin, -- I/O 08 PIN 5 IOPortTag & x"04" & BISSTag & BISSClkPin, -- I/O 09 PIN 6 IOPortTag & x"00" & NullTag & x"00", -- I/O 10 PIN 7 IOPortTag & x"00" & NullTag & x"00", -- I/O 11 PIN 8 IOPortTag & x"00" & NullTag & x"00", -- I/O 12 PIN 9 IOPortTag & x"00" & NullTag & x"00", -- I/O 13 PIN 10 IOPortTag & x"00" & NullTag & x"00", -- I/O 14 PIN 11 IOPortTag & x"00" & NullTag & x"00", -- I/O 15 PIN 12 IOPortTag & x"00" & NullTag & x"00", -- I/O 16 PIN 13 -- P2 26 HDR DB25 IOPortTag & x"00" & NullTag & x"00", -- I/O 17 PIN 1 PIN 1 IOPortTag & x"00" & NullTag & x"00", -- I/O 18 PIN 2 PIN 14 IOPortTag & x"00" & NullTag & x"00", -- I/O 19 PIN 3 PIN 2 IOPortTag & x"00" & NullTag & x"00", -- I/O 20 PIN 4 PIN 15 IOPortTag & x"00" & NullTag & x"00", -- I/O 21 PIN 5 PIN 3 IOPortTag & x"00" & NullTag & x"00", -- I/O 22 PIN 6 PIN 16 IOPortTag & x"00" & NullTag & x"00", -- I/O 23 PIN 7 PIN 4 IOPortTag & x"00" & NullTag & x"00", -- I/O 24 PIN 8 PIN 17 IOPortTag & x"00" & NullTag & x"00", -- I/O 25 PIN 9 PIN 5 IOPortTag & x"00" & NullTag & x"00", -- I/O 26 PIN 11 PIN 6 IOPortTag & x"00" & NullTag & x"00", -- I/O 27 PIN 13 PIN 7 IOPortTag & x"00" & NullTag & x"00", -- I/O 28 PIN 15 PIN 8 IOPortTag & x"00" & NullTag & x"00", -- I/O 29 PIN 17 PIN 9 IOPortTag & x"00" & NullTag & x"00", -- I/O 30 PIN 19 PIN 10 IOPortTag & x"00" & NullTag & x"00", -- I/O 31 PIN 21 PIN 11 IOPortTag & x"00" & NullTag & x"00", -- I/O 32 PIN 23 PIN 12 IOPortTag & x"00" & NullTag & x"00", -- I/O 33 PIN 25 PIN 13 emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, -- added for 34 pin 5I25 emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, -- added for IDROM v3 emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin, emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin,emptypin); end package BISS_5i25;

Report:
Code:
hm2: loading Mesa HostMot2 driver version 0.15 hm2_pci: loading Mesa AnyIO HostMot2 driver version 0.7 hm2_pci: discovered 5i25 at 0000:02:00.0 hm2/hm2_5i25.0: inconsistent Module Descriptor for BiSS Encoder, not loading driver hm2/hm2_5i25.0: Version = 0, expected 0 hm2/hm2_5i25.0: NumRegisters = 4, expected 3 hm2/hm2_5i25.0: InstanceStride = 0x00000004, expected 0x00000004 hm2/hm2_5i25.0: MultipleRegisters = 0x00000007, expected 0x00000003 hm2/hm2_5i25.0: inconsistent absenc Module Descriptor! hm2/hm2_5i25.0: failed to parse Module Descriptor 3 hm2_5i25.0: board fails HM2 registration RTAPI_PCI: Unmapped 65536 bytes at 0x7f2f11f59000
Code:
1 0 IOPort (unknown-gtag) 0 Unknown (In) 14 1 IOPort (unknown-gtag) 0 Unknown (Out) 2 2 IOPort (unknown-gtag) 1 Unknown (In) 15 3 IOPort (unknown-gtag) 1 Unknown (Out) 3 4 IOPort (unknown-gtag) 2 Unknown (In) 16 5 IOPort (unknown-gtag) 2 Unknown (Out) 4 6 IOPort (unknown-gtag) 3 Unknown (In) 17 7 IOPort (unknown-gtag) 3 Unknown (Out) 5 8 IOPort (unknown-gtag) 4 Unknown (In) 6 9 IOPort (unknown-gtag) 4 Unknown (Out)

Full report is in attachments.

Please Log in to join the conversation.

More
7 years 5 months ago #134705 by pl7i92
you shoudt contact the mesa support direct on this

Please Log in to join the conversation.

More
7 years 5 months ago #134707 by PCW
That's a driver bug, the BISSNumRegs (4) and BISSMPBitMask (7) are correct

Please Log in to join the conversation.

More
7 years 5 months ago #134840 by PCW
in abs_encoder.c:

case HM2_GTAG_BISS:
if ( ! hm2_md_is_consistent_or_complain(hm2, md_index, 0, 3, 4, 0x03)) {
HM2_ERR("inconsistent absenc Module Descriptor!\n");
return -EINVAL;
}

Should be:

case HM2_GTAG_BISS:
if ( ! hm2_md_is_consistent_or_complain(hm2, md_index, 0, 3, 4, 0x07)) {
HM2_ERR("inconsistent absenc Module Descriptor!\n");
return -EINVAL;
}


( The pin name issue is because mesaflash doesn't know about the BISS module, but this is is harmless)

EDIT: OOPS the firmwware was updated sometime before 2014 per non-LinuxCNC customer request and has a slightly different register
map (an additional control register was added to allow setting a data input digital filter time constant) So will need driver fixes to work with LinuxCNC

Please Log in to join the conversation.

More
6 years 11 months ago #150450 by PCW
I have this fixed now at long last(at least it works with the one BISS encoder I have) , it requires updated firmware (a couple bits were reversed in one register) and the updated hm2 driver code to work

Please Log in to join the conversation.

More
6 years 10 months ago #152359 by rumking
Hi PCW,
I am facing the same issue. Nice to hear that the problem may be solved with the updated firmware. Is the updated hostmot2 available on github?
Thank you!

Please Log in to join the conversation.

More
6 years 10 months ago #152367 by PCW
The updated firmware source is available from Mesa (any FPGA card support zip file has the updated source)

The driver source has not been merged yet but is available here:

freeby.mesanet.com/newmesa.zip

Please Log in to join the conversation.

More
6 years 10 months ago #152522 by rumking
Hi PCW,
thanks for the files.
I created a bitfile - 5i25+7i76+7i85(with BISS 1x) and mesaflashed it in the 5i25. When I try to --readhmid the 5i25, it prints out unknown-gtag right where BISS DATA/CLK should be.
1 17 IOPort (unknown-gtag) 0 Unknown (In)
14 18 IOPort (unknown-gtag) 0 Unknown (Out)
Is this some kind of a mesaflash bug or is it some kind of a problem with the bitfile? Or do I have to use some kind of an updated mesaflash?

Then, I compiled the LinuxCNC source with updated files from the zipfile. I pasted the files in ./src/hal/drivers/mesa-hostmot2/ and the Makefile in ./src/. Then I created a simple configuration and launched the linuxcnc. Everything seems to be OK as I am getting (I have the biss timer and the dpll timer set up, but I do not have the actual encoder connected):

hm2/hm2_5i25.0: Data transmission not complete on channel hm2_5i25.0.biss.00 read. You may need to change the timing of the hm2dpll timer. This warning will not repeat

But prints out in the terminal during the startup:
hm2/hm2_5i25.0: IO Pin 017 (P2-01): BiSS Encoder #0, pin unknown-pin-3 (Input)
hm2/hm2_5i25.0: IO Pin 018 (P2-14): BiSS Encoder #0, pin Clck (Output)
Is it normal to have the BISS DATA pin named as "unknown-pin"?

The thing is, that can't test the encoder right now (I don't want to buy a BISS encoder - they are not the cheapest) without knowing that I can make it work. Is there a chance, that the encoder may actually work with this setup? Or am I missing something?

Your help is greatly appreciated.

Please Log in to join the conversation.

More
6 years 10 months ago #152546 by PCW

rumking wrote: Hi PCW,
thanks for the files.
I created a bitfile - 5i25+7i76+7i85(with BISS 1x) and mesaflashed it in the 5i25. When I try to --readhmid the 5i25, it prints out unknown-gtag right where BISS DATA/CLK should be.
1 17 IOPort (unknown-gtag) 0 Unknown (In)
14 18 IOPort (unknown-gtag) 0 Unknown (Out)
Is this some kind of a mesaflash bug or is it some kind of a problem with the bitfile? Or do I have to use some kind of an updated mesaflash?

You need a recent mesaflash

github.com/jethornton/mesaflash


Then, I compiled the LinuxCNC source with updated files from the zipfile. I pasted the files in ./src/hal/drivers/mesa-hostmot2/ and the Makefile in ./src/. Then I created a simple configuration and launched the linuxcnc. Everything seems to be OK as I am getting (I have the biss timer and the dpll timer set up, but I do not have the actual encoder connected):

hm2/hm2_5i25.0: Data transmission not complete on channel hm2_5i25.0.biss.00 read. You may need to change the timing of the hm2dpll timer. This warning will not repeat

This is expected without an encoder


But prints out in the terminal during the startup:
hm2/hm2_5i25.0: IO Pin 017 (P2-01): BiSS Encoder #0, pin unknown-pin-3 (Input)
hm2/hm2_5i25.0: IO Pin 018 (P2-14): BiSS Encoder #0, pin Clck (Output)
Is it normal to have the BISS DATA pin named as "unknown-pin"?

I'll take a look
It could be a firmware or driver error


The thing is, that can't test the encoder right now (I don't want to buy a BISS encoder - they are not the cheapest) without knowing that I can make it work. Is there a chance, that the encoder may actually work with this setup? Or am I missing something?

Your help is greatly appreciated.

BTW the cheapest encoder I found for testing was a small Beckhoff AC servo motor on Ebay that happened to have a BISS encoder (19 bits per turn + 12 bits turn counter)
Beckhoff AM3021-1C41-0000 It was a bit of a pain because that motor has a 24V brake that needs to be powered for testing
note the 4 in 1C41 = multiturn BISS a XX3X instead of 1C41 would be single turn BISS

Please Log in to join the conversation.

More
6 years 10 months ago #152555 by PCW
The bad pinout name was a driver bug
(it doesn't interfere with operation, just lists the wrong physical pin names)

Here is a fixed pins.c with correct names:

freeby.mesanet.com/pins.c

Please Log in to join the conversation.

Time to create page: 0.102 seconds
Powered by Kunena Forum