trabucayre changed the topic of #openFPGALoader to: Universal utility for programming FPGA / Github: https://github.com/trabucayre/openFPGALoader/ Logs: https://libera.irclog.whitequark.org/openFPGALoader
<trabucayre> cr1901: yes
<trabucayre> openFPGALoader --index-chain xx
<trabucayre> but there is an issue with spiOverJtag when multiple devices
<cr1901> how does openFPGALoader figure out IRlen of other devices?
<trabucayre> IRlen is provided by parts.hpp
<cr1901> Yes, but what if you have a board that has a JTAG for e.g. a microcontroller in the chain
<cr1901> Does every microcontroller have to be added to parts.hpp on a board-by-board basis?
<trabucayre> yep :(
<trabucayre> not board-by-board but simply has a know but not supported device
<cr1901> IIRC the process is something like- toggle TMS for at least 5 clocks, then input a _large_ number of 1s. This sets up all bypass registers.
<cr1901> But Idk how to figure out what's in the JTAG chain from there _given a known but not supported device is somewhere on the chain_
<cr1901> i.e. pretend an "ARM cortex A9" is first device, and a MachXO2 is second device. "--index-chain 02" is all I need?
<cr1901> Or do I have to specify the first device as well?
<trabucayre> at startup openFPGALoader scan JTAG
<trabucayre> if chain contains 2 FPGA user has to explicitly provides index
<trabucayre> when arm + fpga: fpga is automatically selected
<trabucayre> for socFPGA, zynq(7000/MP) no needs to use index
<trabucayre> for spartan3 + jtag flash -> index is required
cr1901_ has joined #openFPGALoader
<cr1901_> Very good, thanks Internet. Definitely very convenient time to disconnect
cr1901 has quit [Read error: Connection reset by peer]
<trabucayre> I haven't (dis)connect event in my irssi: don't see that
<cr1901_> ohh hmm, welll it DC'd on my end :D
<trabucayre> I have disabled events :)
<cr1901_> ahhh
<trabucayre> I think I have to spend one week to redo documentation :-/
<cr1901_> Apparently IDCODE is what TAP controllers default to when they reset
<cr1901_> not BYPASS
<cr1901_> So that's why I was confused
<cr1901_> (well, if IDCODE exists*, which is probably true)
<trabucayre> scanning return IDCODE to build chain list
<cr1901_> https://github.com/SpinalHDL/SpinalHDL/issues/388#issue-825429063 Or "IDCODE if the register exists, otherwise BYPASS"
cr1901_ is now known as cr1901
<trabucayre> when you have to sent something at a specific device you pass BYPASS to all others but targeted one.
<cr1901> Yes, that part I _do_ remember :)
<trabucayre> in fact it's for ShiftIR
<trabucayre> for shiftDR you have to pass garbage bits before and after to align data
<cr1901> If you're targeting a single device on the chain, I assume it's implied that you know the DRlen for the register you want to target
<cr1901> and that you add "number of other devices" for the devices in BYPASS
<trabucayre> DRLen : 1b / device
<cr1901> for BYPASS, right?
<trabucayre> IR: IRLENdev1 + IRLENdev2 + target + IRLENdev4 + ...
<trabucayre> DR: 1 + 1 + target + 1 + ...
<trabucayre> for IR you sent BYPASS for all devices and register code for the target
<cr1901> Yep, I remember that part, thankfully. Just forget everything else :P
<cr1901> >I think I have to spend one week to redo documentation :-/ <-- Add a "how autodiscovery works" section :P
<trabucayre> I have many sections to add :-/
<cr1901> Anyways, now it makes sense. If I have a microcontroller to add for a hypothetical dev board, I will add the ID to openfpgaloader :P
<trabucayre> exactly :)
<cr1901> (Probably some MSP430 device, since that's what I'm most used to)
<trabucayre> I haven't played with MSP430 since maybe 10 years :)
enok has quit [Remote host closed the connection]
enok has joined #openFPGALoader