Custom firmware for 5i25 with BISSTag
- kata
- Offline
- New Member
- Posts: 2
- Thank you received: 0
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.
Please Log in or Create an account to join the conversation.
- pl7i92
- Offline
- Platinum Member
- Posts: 1890
- Thank you received: 356
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
- Posts: 17869
- Thank you received: 4776
Please Log in or Create an account to join the conversation.
- PCW
- Away
- Moderator
- Posts: 17869
- Thank you received: 4776
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 or Create an account to join the conversation.
- PCW
- Away
- Moderator
- Posts: 17869
- Thank you received: 4776
Please Log in or Create an account to join the conversation.
- rumking
- Offline
- New Member
- Posts: 18
- Thank you received: 1
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.
- PCW
- Away
- Moderator
- Posts: 17869
- Thank you received: 4776
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.
- rumking
- Offline
- New Member
- Posts: 18
- Thank you received: 1
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.
- PCW
- Away
- Moderator
- Posts: 17869
- Thank you received: 4776
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 or Create an account to join the conversation.
- PCW
- Away
- Moderator
- Posts: 17869
- Thank you received: 4776
(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 or Create an account to join the conversation.