MESA karty a vlastní firmware

Uživatelský avatar
CZ_Pascal
Příspěvky: 870
Registrován: 14. 1. 2008, 8:24
Bydliště: Brno

27. 12. 2016, 8:44

yaqwsx píše:CZ_Pascal: *.PIN je užitečný skutečně jenom pro člověka. PnCConf funguje na základě *.XML souboru. Oba dva soubory jsou mezi sebou konzistentní a jsou vygenerované originálním build procesem. Problém je v tom, že očividně samotný firmware (*.BIT) soubor obsahuje jiné mapování pinů, jelikož jej karta po nahraní reportuje zpět. A je mi záhadou, jak se to může stát.
Hmm... psal jsi, že pracuješ s 5i24 -> tedy firmware nahráváš "ručně" pomocí příkazů něco jako jako "sudo mesaflash --device 5i24 --write SVST1_5_72.BIT"

Pokud je firmware z nějakého důvodu nefunkční/nekonzistentní, tak to spadne do "fallback" konfigurace, která má rozložení pinů "původní".
Tento stav by měl být signalizován myslím nějakou LEDkou na kartě :roll: (...si to všechno nepamatuju)

Další věc (to ale snad víš) je že musíš po zmněně firmware PC natvrdo vypnout a zapnout pro to aby se nahrál "nový" firmware z EEPROM. Ty to totiž na rozdíl od 5i20 nenahráváš firmware do FPGA, ale pouze do konfigurační EEPROM odkud si ho FPGA načte po probuzení.
(probuzení z totálního vypnutí - bez napětí -> obyč reset toto neudělá. PC je potřeba opravdu vypnout + pár sekund počkat + pak teprve zapnout.)

Mrkni na to a dej vědět jestli to není tato příčina.
yaqwsx
Příspěvky: 137
Registrován: 9. 9. 2011, 1:12

27. 12. 2016, 9:36

CZ_Pascal píše: Další věc (to ale snad víš) je že musíš po zmněně firmware PC natvrdo vypnout a zapnout pro to aby se nahrál "nový" firmware z EEPROM.
A tady byl zakopaný pes! Mesaflash nabízí parameter --reload, který by neměl vyžadovat vypnutí. Ale očividně nefungoval. Teď to celé funguje krásně. Díky.
Uživatelský avatar
CZ_Pascal
Příspěvky: 870
Registrován: 14. 1. 2008, 8:24
Bydliště: Brno

28. 12. 2016, 7:37

Super :wink: Jsem rád že jsi to rozchodil.

On ten --reload funguje jen na některé karty.
Tady (5i25, 5i24 atd...) je řadič PCI součástí firmware FPGA, takže reload za chodu je docela problém.

Ale nadruhou stranu, jak často měníš ten firmware (samozřejmě nepočítám laborování a hraní si s tím).
A ten restart s SSD diskem se docela dá přežít.

Těším se že sem nahrneš zase nějaké další info co a jak se ti podařilo :!: :D
Jak jsem psal.. já už se na to chystám několik let a pořád se ne a ne k tomu dostat ..... :?
yaqwsx
Příspěvky: 137
Registrován: 9. 9. 2011, 1:12

29. 12. 2016, 4:20

Radoval jsem se předčasně - nachystal jsem si HAL soubor, pořádně jej otestoval v HALScopu. Pak jsem desku připojil ke stroji a nic se nedělo. Zjistil jsem, že všechna IO zůstávají neustále v logické jedničce a vůbec nereagují na to, co se děje v systému. Pokud je ale nakonfiguruji jako vstupy, tak fungují bez problému. Pouze výstupy jsou nehledě na stav v systému na vysoké úrovni. Nesetkali jste se někdo s tím?
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22386
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

29. 12. 2016, 4:28

nevim co tam mas pripojeny ale vsecky mesacky io karty maji funkci bezpecnych vystupu
tj musi se nastavit nejake enable bity aby jsi povolil generovani cehokoli na vystup
Vsechna prava na chyby vyhrazena (E)
yaqwsx
Příspěvky: 137
Registrován: 9. 9. 2011, 1:12

29. 12. 2016, 4:34

Můžeš to prosím rozvést? Momentálně mám 5i24, k P4 připojený kabel a na IO22, které je nastavené jako výstup, měřím napětí. Ať dělám co dělám (přepínám tlačítkem HALovský pin hm2_5i24.0.gpio.022.out) je tam 5V. Jaké bity (v HALu? Ve firmwaru?) je třeba nastavit?
Uživatelský avatar
robokop
Site Admin
Příspěvky: 22386
Registrován: 10. 7. 2006, 12:12
Bydliště: Praha
Kontaktovat uživatele:

29. 12. 2016, 4:58

Jestli to meris na hole fpga karte tak by to melo byt ok
Ja myslel ze za tim mas pripojenou nejakou mesackou vystupni kartu
Vsechna prava na chyby vyhrazena (E)
Uživatelský avatar
CZ_Pascal
Příspěvky: 870
Registrován: 14. 1. 2008, 8:24
Bydliště: Brno

29. 12. 2016, 7:30

No a (skoro se bojím zeptat na takovou banalitu, abych tě neurazil) tohle máš nastavné ??

setp hm2_5i24.0.gpio.022.is_output true
yaqwsx
Příspěvky: 137
Registrován: 9. 9. 2011, 1:12

29. 12. 2016, 8:20

V pohodě (za každou radu jsem rád), pin mám samozřejmě nastavený jako výstupní.
fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

29. 12. 2016, 8:37

Nektery karty maj na vystupu pullup resistory. zkus to přizemnit 10k odporem a pak teprve měřit.
Matně si vzpominám, že sem s nečím podobným bojoval. Měřák ukazoval furt blbosti, ale po připojení k obvodu to chodilo.
Martin
yaqwsx
Příspěvky: 137
Registrován: 9. 9. 2011, 1:12

29. 12. 2016, 8:44

Při testování jsem si všimnul, že běhěm startu axisu pin na chvíli nabyde správné hodnoty. To mě trklo - spustil se mi watchdog, který automaticky nastaví všechny piny na vstupní. Když jsem mu prodloužil interval, všechno začalo fungovat. Teď ještě musím zjistit, jaká je příčina, že 5 ms na watchdog nestačilo (ale 50 už je Ok). Nemáte tipy, jak zdebugovat, co způsobilo přetečení watchdogu (tzn. kde se HAL zastavil na více než 5 tiků servo-thread?)
fupe
Příspěvky: 638
Registrován: 27. 5. 2008, 9:10
Bydliště: Praha

27. 6. 2018, 8:47

Tak jsem včera narychlo tvořil změnu pinu pro 7i76e tak to sem hodim, protože už sem to vymýšlel podruhý tak at nemusim potreti.
Nejakej mamlas, kterej si hraje na počítači s kdejakym softem jsem dostal pecko s Linuxem do takového stavu, že puvodni data byla fuč.

Potřeboval jsem udělat nový firmware pro 7i76e tak že místo posledního pátého stepgenu bude PWM, který by řidilo laser.
step/dir ma sice dva draty a pwm tři, ale postačej i dva, protože laser tak nejak nepotřebuje vědět směr. Ti padem, jsem vytahl jenom PWM-P a PWM-enable.
PWM-D mizi někde v černé diře uvnitř karty.
Z mě neznámých duvodu není ve vzorovem souboru pro kompilaci ani zminka o tehle karte a co vic, není o ni zminka v souboru cards.py kde je definovano co použít pro samotnou kompilaci, Jaka karta to je, jaky ma procesor, kam davat hotove soubory atd.

takže jako první je potřeba přidat do scripts/cards.py

Kód: Vybrat vše

class i76e(TopEth, DBx4, Spartan6_16_256, BitgenCanFallback):
    path = "7i76e"
    name = "i76e_x16"
    card = "7i76e"
    humanname = "Mesa 7i76E"
A potom provezt samotnou zmenu pinu a komponent ve firmware.
nejbližší a vlastně jediný hotovy firware pro 7i76e je PIN_7I76E_51.vhd
ten jsem prekopiroval do PIN_7I76E_51_PWM.vhd a tim padem je potřeba přejmenovat sekci PACKAGE aby odpovídala jmenu souboru

Kód: Vybrat vše

package PIN_7I76E_51_PWM is 
.....
.
.
.
.
end package PIN_7I76E_51_PWM;
A ted samotne komponenty
v sekci constant ModuleID : ModuleIDType přidáme záznam pro PWM

(PWMTag, x"00", ClockHighTag, x"01", PWMValAddr&PadT, PWMNumRegs, x"00", PWMMPBitMask),

a odmazneme jeden řádek

(NullTag, x"00", NullTag, x"00", NullAddr&PadT, x"00", x"00", x"00000000"),

tak aby celkový počet zaznamu v sekci zůstal nezmenen.
samozrejme ze z hlavy to psat je nesmysl, takže jsem tento řádek okopiroval z jiného vhdl souboru kde se vyskytuje.
Dál je potřeba snížit počet stepgenu o jeden.

(StepGenTag, x"02", ClockLowTag, x"04", StepGenRateAddr&PadT, StepGenNumRegs, x"00", StepGenMPBitMask),

tim jsme si zaměnili komponentu stepgen za pwm, ale ještě nam nikde nelezou ven draty.
to udelame v nasledujici sekci constant PinDesc : PinDescType
je to docela dobře citelne a okomentovane. takže staci najit poslední stepgen a nahradit.
IOPortTag & x"00" & StepGenTag & StepGenDirPin, -- I/O 00 embedded 7I76
IOPortTag & x"00" & StepGenTag & StepGenStepPin, -- I/O 01
IOPortTag & x"01" & StepGenTag & StepGenDirPin, -- I/O 02
IOPortTag & x"01" & StepGenTag & StepGenStepPin, -- I/O 03
IOPortTag & x"02" & StepGenTag & StepGenDirPin, -- I/O 04
IOPortTag & x"02" & StepGenTag & StepGenStepPin, -- I/O 05
IOPortTag & x"03" & StepGenTag & StepGenDirPin, -- I/O 06
IOPortTag & x"03" & StepGenTag & StepGenStepPin, -- I/O 07
IOPortTag & x"04" & StepGenTag & StepGenDirPin, -- I/O 08
IOPortTag & x"04" & StepGenTag & StepGenStepPin, -- I/O 09

IOPortTag & x"00" & SSerialTag & SSerialTX0Pin, -- I/O 10
IOPortTag & x"00" & SSerialTag & SSerialRX0Pin, -- I/O 11
IOPortTag & x"00" & SSerialTag & SSerialTX1Pin, -- I/O 12
IOPortTag & x"00" & SSerialTag & SSerialRX1Pin, -- I/O 13
IOPortTag & x"00" & QCountTag & x"03", -- I/O 14
IOPortTag & x"00" & QCountTag & x"02", -- I/O 15
IOPortTag & x"00" & QCountTag & x"01", -- I/O 16


IOPortTag & x"00" & StepGenTag & StepGenDirPin, -- I/O 00 embedded 7I76
IOPortTag & x"00" & StepGenTag & StepGenStepPin, -- I/O 01
IOPortTag & x"01" & StepGenTag & StepGenDirPin, -- I/O 02
IOPortTag & x"01" & StepGenTag & StepGenStepPin, -- I/O 03
IOPortTag & x"02" & StepGenTag & StepGenDirPin, -- I/O 04
IOPortTag & x"02" & StepGenTag & StepGenStepPin, -- I/O 05
IOPortTag & x"03" & StepGenTag & StepGenDirPin, -- I/O 06
IOPortTag & x"03" & StepGenTag & StepGenStepPin, -- I/O 07
IOPortTag & x"00" & PWMTag & PWMAOutPin, -- I/O 08
IOPortTag & x"00" & PWMTag & PWMCEnaPin, -- I/O 09

IOPortTag & x"00" & SSerialTag & SSerialTX0Pin, -- I/O 10
IOPortTag & x"00" & SSerialTag & SSerialRX0Pin, -- I/O 11
IOPortTag & x"00" & SSerialTag & SSerialTX1Pin, -- I/O 12
IOPortTag & x"00" & SSerialTag & SSerialRX1Pin, -- I/O 13
IOPortTag & x"00" & QCountTag & x"03", -- I/O 14
IOPortTag & x"00" & QCountTag & x"02", -- I/O 15
IOPortTag & x"00" & QCountTag & x"01", -- I/O 16

a jak už jsem psal PWMBOutPin není použit.
7i76e ma sice diferencialni vystupy pro step/dir, ale to nam nevadi. když budete merit napeti proti zemi pripadne proti 5V tak na PWM vystupu najdete co potrebujete.

no a ted uz staci jenom vytvořit soubor firmwares-local.txt a napsat do nej

i76e 7I76E_51_PWM

první položka je typ karty a druhej pinout
pinout se pise bez predpony PIN_ a bez přípony.

a ted uz jenom make a za 10-15 minut vypadne hotovej BIT file.
ještě upozornim na to, ze výsledkem kompilace je sice i xml soubor s popisem pinu pro ostatní programy, ale třeba pncconf ho pro tuto kartu neumi pouzit. jina situace je u PCI karet, tam funguje. Ale u ethernetovejch karet proste ne, tam je popis pinu natvrdo zakomponovanej do pnccocnfu. takže to nase nove PWM nejde naklikak do konfigurace,a le je potřeba ho do hal souboru dopsat rucne. Ale to pro nekoho kdo se prokousal az ke kompilaci firmware snad nebude problém.
Preju peknej den.
Martin
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

27. 6. 2018, 10:57

Fajn, žes to napsal.
Díky. :-)
Mex
Příspěvky: 10287
Registrován: 6. 2. 2014, 10:29

3. 7. 2018, 12:18

Konečně jsem se dostal k úpravám firmware.
Mám 3 poznatky, které podle mě stojí za zveřejnění.

1 - Ve všech návodech ke generování firmware pro Mesu se píše, že je třeba použít max. verzi vývojového prostředí ISE WebPack 13.x. Xilinx už tuhle řadu ISE dost dávno zaříznul a už ji nerozvíjí, nicméně poslední verze byla 14.7.
Tak nějak se mi nelíbí používat starší verzi 13.4 když existuje 14.7 (kde předpokládám něco vylepšili a opravili). No a tak jsem zjistil, že se pro překlad firmware dá použít i tahle poslední verze 14.7.

Co je pro to třeba udělat: Mesa má ve svých scriptech pro generování firmware záměrně omezenu řadu ISE, je třeba to omezení rozšířit. Týká se to souborů cards.py a pin.py v adresáři scripts.
Tam, kde je něco jako iseversions = (13, 10, 9) je třeba to přepsat na iseversions = (14, 13, 10, 9) - platí pro cards.py, případně use_ise((13,10,9)) přepsat na use_ise((14,13,10,9)) - platí pro pin.py.

2 - Pro generování firmware není zapotřebí instalovat balík GHDL, jak je opět napsáno ve všech návodech. Je to docela podstatné, protože s instalací GHDL jsou trochu problémy, má to dost závislostí a není to zrovna hladká instalace. Takže tím, že se nemusí instalovat, odpadlo poměrně dost práce. To GHDL by sloužilo asi jen pro nějakou simulaci, ale to zřejmě téměř nikdo z nás nebude dělat. A pokud bude, tak ten už si to pak doinstalovat jistě zvládne.

3 - Pro používání celého balíku od Xilinxu je třeba licence. O to se zažádá formulářem na webu, mailem pak přijde soubor Xilinx.lic. Proč to píšu: tenhle soubor je pak následně použitelný napříč platformami i napříč verzemi. Takže se svým jediným souborem Xilinx.lic provozuju ISE verze 13.4 i 14.7., a to jak na Linuxu, tak na Windows.

Takže shrnuto: instalace a zprovoznění všeho potřebného pro úpravy firmware pro Mesu je nakonec docela snadné. Stačí stáhnout jednu instalačku od Xilinxu (teda bohužel dost velkou), tu rozbalit, pustit xsetup. Pak do systému přidat cestu k nainstalovanénu SW (ta instalace to sama neudělá, a bez toho se to pak chová divně), nastavit mu adresu souboru Xilinx.lic a můžeme generovat firmware.

Co se mi zatím nepovedlo je zprovoznit to na 64-bitovém Linuxu. Tam se to chová nějak podivně. Přikládám to tomu, že Mesa má ve svých scriptech 32-bitová volání, a tak se to pak asi nějak hádá s defaultním 64-bitovým režimem. Asi to řešit nebudu, nezbytně to nepotřebuju.

Pro zajímavost: pro mojí kartu 7i90 trvá vygenerování jednoho firmware cca 3.5 minuty (nějaký dost starý AMD Athlon 455). Nahrání firmware do Flash na kartě pak cca 30 sekund (7i90 neumí natahovat firmware dynamicky při startu, potřebuje mít firmware ve Flash na kartě).
Odpovědět

Zpět na „LinuxCNC - drive pod nazvem EMC2“