Skip to content
Snippets Groups Projects
Commit 3fe7e990 authored by bence98's avatar bence98
Browse files

JTAG leírása

parent 84867754
No related branches found
No related tags found
No related merge requests found
......@@ -361,6 +361,103 @@ Ha nincs a RST lábat használó átvitel megnyitva, lehetőségünk van aszinkr
\subsection{Átviteli módok}
\subsubsection{JTAG}
% TODO
Az első és talán legfontosabb implementált átviteli mód a JTAG. Ez a 0. interfész 0x01/0x82 enpoint-párját használja, valamint az LDC TDI, TDO, TMS, TCK és JTREF lábait. Ezen az interfészen keresztül lehetséges az LDC-hez illesztett elektronika konfigurálása és hibakövetése.
A JTAG megnyitásához két Control blokkot kell kiadnunk:
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|l|}
\hline
\textit{Művelet} & \textit{JTAG inicializálás} & \textit{Adatátvitel megnyitása}\\ \hhline{|=|=|=|}
irány & IN & OUT\\ \hline
bRequest & 16 & 18\\ \hline
wValue & JTAG mód & 0\\ \hline
wIndex & 0 & 0\\ \hline
hossz & 1 & 0\\ \hline
\end{tabular}
\noindent Ha az első kérés logikai hamisat ad vissza, megszakítjuk a műveletet. A "JTAG mód" paraméter leírása lejjebb található.
Megnyitott JTAG átvitel közben fel tudjuk deríteni a JTAG láncot (\textit{Boundary Scan}), ehhez egy tapasztalati úton talált "mágikus sorozatot" kell leadnunk a 0x01 Bulk végponton, erre a \texttt{logsys\_jtag\_scan} függvény használható.
Az átvitel bezárásához a következő kérést használjuk:
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|}
\hline
\textit{Művelet} & \textit{JTAG bezárás}\\ \hhline{|=|=|}
irány & OUT\\ \hline
bRequest & 17\\ \hline
wValue & 0\\ \hline
wIndex & 0\\ \hline
hossz & 0\\ \hline
\end{tabular}
\noindent\textbf{Implementáció}
\begin{itemize}
\item Megnyitás: \texttt{logsys\_jtag\_begin} (\textit{include/logsys/jconf.h:6}, implementáció: \textit{src/shared/jctrl.c:6})
\item Lezárás: \texttt{logsys\_jtag\_end} (\textit{include/logsys/jconf.h:8}, implementáció: \textit{src/shared/jctrl.c:28})
\item Lánc felderítés: \texttt{logsys\_jtag\_scan} (\textit{include/logsys/jconf.h:13}, implementáció: \textit{src/shared/jctrl.c:32})
\end{itemize}
\noindent\textbf{JTAG módok}
A LDC kétféle módban tudja a JTAG interfészt kezelni:
\begin{itemize}
\item Visszaolvasás mód: ebben a módban a kiadott TDI értékekre kapott TDO választ visszaküldi USB transzferen keresztül a számítógépnek
\item Ellenőrzés mód: ekkor a számítógép a TDI-vel együtt a várt TDO értékeket is elküldi, majd a transzfer után egy Control blokkal lekérdezi, hogy történt-e hiba (várttal nem egyező TDO érték)
\end{itemize}
Az ellenőrzést a következő kéréssel végezzük:
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|}
\hline
\textit{Művelet} & \textit{JTAG bezárás}\\ \hhline{|=|=|}
irány & IN\\ \hline
bRequest & 20\\ \hline
wValue & 0\\ \hline
wIndex & 0\\ \hline
hossz & 1\\ \hline
\end{tabular}
A módot megnyitott átvitel esetén is átválthatjuk:
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|l|}
\hline
\textit{Művelet} & \textit{Lekérdezés} & \textit{Beállítás}\\ \hhline{|=|=|=|}
irány & IN & OUT\\ \hline
bRequest & 19 & 19\\ \hline
wValue & 0 & JTAG mód\\ \hline
wIndex & 0 & 0\\ \hline
hossz & 1 & 0\\ \hline
\end{tabular}
\begin{itemize}
\item Ellenőrzés: \texttt{logsys\_jtag\_check\_error} (\textit{include/logsys/jconf.h:19}, implementáció: \textit{src/shared/jctrl.c:73})
\item Enumeráció: \texttt{enum LogsysJtagMode} (\textit{include/logsys/common.h:42})
\item Mód lekérdezése: \texttt{logsys\_jtag\_get\_mode} (\textit{include/logsys/jconf.h:15}, implementáció: \textit{src/shared/jctrl.c:62})
\item Mód beállítása: \texttt{logsys\_jtag\_set\_mode} (\textit{include/logsys/jconf.h:17}, implementáció: \textit{src/shared/jctrl.c:69})
\end{itemize}
\noindent\textbf{JTAG adatátvitel}
A TDI/TDO/TMS értékek megadása a 0x01/0x82 endpoint-párra küldött Bulk transzferekkel történik, egy speciális csomagformátumban:
% TODO jtag_packet
\noindent\textbf{FPGA konfigurációs fájlok}
A libxsvf-nek köszönhetően SVF és XSVF formátumú fájlokat képes a program natívan kezelni. Azonban a BIT (és JED) formátumok nem nyíltak, így azok kezeléséhez a Xilinx egyik segédprogramjával (iMPACT) át kell konvertálnom SVF-re. (ugyanezt teszi egyébként a Logsys GUI is). A segédprogrammal való kommunikációhoz a libc \texttt{popen} metódusát használom, ami a Unix pipe-okat használja (a Logsys GUI pedig temporális fájlokat hoz létre ugyanerre a célra). Azonban az iMPACT-nak nem lehet megmondani, hogy ne hozzon létre logfájlt, így hogy ne szemetelje tele a munkakönyvtárat, a szubprocessz elindítása előtt átlépek a \texttt{/tmp} könyvtárba, ami Unix-szerű rendszereken általában bárki által írható és nem perzisztens tároló. Ennek következtében azonban elveszítjük a relatív útvonalak használatának lehetőségét (hiszen mappát váltunk, és az így a \texttt{/tmp}-hez képest értelmeződne). Valamint mivel a terminálból olvasáskor a parancsok paramétereit szóközzel választom el, problémás a szóközt tartalmazó útvonalak használata. Speciális esetként beletettem, hogy az aposztrófok vagy idézőjelek közötti szóköz ne törje az argumentumlistát, de pl. nem támogatom a "\texttt{\textbackslash~}" formátumú escape-lést. Valamint ha egy útvonal tartalmaz aposztrófot ÉS idézőjelet IS, akkor nem reprezentálható.
\noindent\textbf{Implementáció}
\begin{itemize}
\item SVF letöltése: \texttt{logsys\_jtag\_dl\_svf} (\textit{include/logsys/jconf.h:25}, implementáció: \textit{src/shared/jconf.c:202})
\item XSVF letöltése: \texttt{logsys\_jtag\_dl\_xsvf} (\textit{include/logsys/jconf.h:20}, implementáció: \textit{src/shared/jconf.c:206})
\item BIT (vagy JED) konvertálása: \texttt{logsys\_conv\_bit2svf} (\textit{include/logsys/jconf.h:35}, implementáció: \textit{src/shared/jconf.c:210})
\end{itemize}
\subsubsection{SPI}
% TODO
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment