Custom firmware for 5i25 with BISSTag

More
23 May 2019 13:55 #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:
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:
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
 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.
Attachments:

Please Log in or Create an account to join the conversation.

More
23 May 2019 14:41 #134705 by pl7i92
you shoudt contact the mesa support direct on this

Please Log in or Create an account to join the conversation.

More
23 May 2019 14:51 #134707 by PCW
That's a driver bug, the BISSNumRegs (4) and BISSMPBitMask (7) are correct

Please Log in or Create an account to join the conversation.

More
24 May 2019 19:02 - 24 May 2019 23:02 #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
Last edit: 24 May 2019 23:02 by PCW.

Please Log in or Create an account to join the conversation.

More
16 Nov 2019 03:41 - 16 Nov 2019 03:49 #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
Last edit: 16 Nov 2019 03:49 by PCW.

Please Log in or Create an account to join the conversation.

More
09 Dec 2019 13:40 #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 or Create an account to join the conversation.

More
09 Dec 2019 15:38 #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 or Create an account to join the conversation.

More
12 Dec 2019 10:29 #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 or Create an account to join the conversation.

More
12 Dec 2019 15:42 - 12 Dec 2019 16:18 #152546 by PCW

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

Last edit: 12 Dec 2019 16:18 by PCW. Reason: add biss

Please Log in or Create an account to join the conversation.

More
12 Dec 2019 21:43 - 13 Dec 2019 03:43 #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
Last edit: 13 Dec 2019 03:43 by PCW.

Please Log in or Create an account to join the conversation.

Moderators: PCWjmelson
Time to create page: 0.091 seconds
Powered by Kunena Forum