Skip to content
Snippets Groups Projects
Commit 677bcdbe authored by bence98's avatar bence98
Browse files

TDK template, VM ábra, protokoll leírás elkezdve

parent 4cfa2a23
No related branches found
No related tags found
No related merge requests found
[submodule "thesis-template-latex"]
path = thesis-template-latex
url = git@github.com:FTSRG/thesis-template-latex.git
......@@ -4,6 +4,12 @@
\usepackage[hyphens]{url}
\usepackage{graphicx}
%\usepackage[magyar]{babel}
\usepackage{amssymb}
\input{thesis-template-latex/src/include/packages}
\input{variables}
\input{thesis-template-latex/src/include/thesis-hu}
\input{thesis-template-latex/src/include/preamble}
\graphicspath{{./img/}}
......@@ -13,8 +19,11 @@
\begin{document}
\maketitle
\pagebreak
\selectthesislanguage
%\maketitle
%\pagebreak
\include{thesis-template-latex/src/include/titlepage-tdk}
\tableofcontents
\pagebreak
......@@ -34,6 +43,7 @@ A projektben hivatkozom Raikovich Tamás diplomatervére, valamint Wacha Gábor
\end{abstract}
\pagebreak
\selectenglish
\begin{abstract}
The goal of my work is to extend the platform support of the Logsys toolchain, currently in use in education at the department and the faculty.
......@@ -48,6 +58,7 @@ In the future, the following improvements could be made: reproducing the Logsys
In the project I reference Tamás Raikovich's thesis draft and make use of code written by Gábor Wacha and Benedek Kiss.
\end{abstract}
\pagebreak
\selectthesislanguage
\section{A Logsys rendszer}
A TDK munkám alapja (előzménye, ha úgy tetszik) a kari oktatásban használt, a Méréstechnika és Információs Rendszerek tanszék által kifejlesztett Logsys fejlesztői környezet. Ez a rendszer 3 részre bontható:
......@@ -108,20 +119,80 @@ Mivel a tanszék nem adta ki a forráskódokat, a platformfüggetlenítéshez el
Az ötlet a következő volt: futtassuk a Windowsos programot egy VM-ben (Windows guest), és a Linux hoston fogjuk el az USB adatforgalmat! Ez az ötlet remekül működött; a hoston WireShark \cite{wireshark} segítségével el tudtam kapni az USB csomagokat (USB Request Block, URB), amit ezek után kézzel fejtettem vissza.
\begin{figure}[h] \label{fig:vm}
\centering
\includegraphics[width=300px]{vm}
\caption{A mérési elrendezés}
\end{figure}
Azonban akadt egy kis probléma: néha a VM-en belül nem lehetett megnyitni a JTAG interfészt. Ezért kénytelen voltam egy régi Windows XP-re telepíteni a Logsys toolchaint és a WireSharkot. Azonban a Windowsos WireShark nem támogatja az USB folyam lehallgatását, így erre egy újabb segédprogramot, az USBPcap-et kellett telepítenem. De végül sikerült elegendő mérési adatot összegyűjtenem, ami alapján el tudtam kezdeni a Logsys GUI és az LDC közti protokoll felderítését.
A későbbiekben nekiálltam a Logsys GUI "hagyományos" úton történő visszafejtésének is (decompile az ILSpy nevű program segítségével), amivel kiegészíthettem hiányos ismereteimet. Emellett időközben Raikovich Tamástól kaptam egy PDF-et, amiben leírja a (csomagelkapásból megfejthetetlen, bináris adatfolyamként érkező) struktúrák kiosztását.
A protokoll visszafejtését kezdetben szisztematikus teszteléssel végeztem: elindítottam a WireShark (vagy az USBPcap) csomagelkapását, megnyomtam egy gombot a Logsys GUI-n, leállítottam a csomagelfogást, és kielemeztem. Ezzel a módszerrel sikeresen megfejtettem az alap funkciók (tápfeszültség állítása, aszinkron reset, adatátviteli módok be-/kikapcsolása, JTAG lánc le\textit{tap}ogatása). Azonban bizonyos funkciókat nem lehetett ily módon megfejteni (ilyenek tipikusan az adatátvitelek, így például az egyik legfontosabb funkció, a JTAG interfészen keresztüli FPGA konfiguráció).
Így a későbbiekben nekiálltam a Logsys GUI "hagyományos" úton történő visszafejtésének is (decompile az ILSpy nevű program segítségével), amivel kiegészíthettem hiányos ismereteimet. Emellett időközben Raikovich Tamástól kaptam egy PDF-et, amiben leírja a (csomagelkapásból megfejthetetlen, bináris adatfolyamként érkező) struktúrák kiosztását. Ezenfelül fejlesztés közben jómagam is kutattam az Interneten további dokumentáció után, így akadtam például Wacha Gábor Qt alapú Logsys GUI-rekreációjára, aminek forráskódját készségesen rendelkezésemre bocsájtotta.
% TODO: adat -> tudás
Ennek a három adathalmaznak (a csomagelkapások, a visszafejtett forráskód és a dokumentáció) az összevetésével teljesebb képem alakult ki az adatátviteli protokollról.
A visszafejtett protokoll leírását a \ref{sec:LS USB}. fejezet taglalja.
Ezzel az ismerettel neki is álltam a saját programom fejlesztésének. Az USB kommunikáció megvalósítására a LibUSB nevű, cross-platform keretrendszert alkalmaztam. Linuxos berkekben az USB kezelést javarészt ezen az API-n keresztül valósítják meg. A Windowsos segédprogramban ezt a funkciót a kernel driver látta el.
Az FPGA konfiguráció fájlok kezeléséhez szükségem volt még egy függvénykönyvtárra, ez a Clifford Wolf által fejlesztett libxsvf (\url{http://www.clifford.at/libxsvf/}). A Logsys GUI-ban ennek az analógiája az \textit{SVF.dll}.
Az FPGA konfiguráció fájlok (Serial Vector Format, SVF) kezeléséhez szükségem volt még egy függvénykönyvtárra, ez a Clifford Wolf által fejlesztett libxsvf (\url{http://www.clifford.at/libxsvf/}). A Logsys GUI-ban ennek az analógiája az \textit{SVF.dll}.
\pagebreak
\section{Logsys USB kommunikációs protokoll} \label{sec:LS USB}
Az LDC USB-azonosítója (Vendor ID : Product ID) \textit{03eb:f0ff}. Az USB eszköz két interfészt tartalmaz: a 0. interfészen található egy OUT/IN endpoint-pár (0x01, 0x82) a JTAG és SPI adatok átvitelére, illetve egy másik endpoint-pár (0x03 és 0x84) az USART, I\textsuperscript{2}C és BitBang I/O átvitelekhez. Ennek a kiosztásnak technikai okai vannak, amiről részletesebben Raikovich Tamás diplomatervének \cite{RT-dipterv} "8.2 A funkciók megvalósítása" fejezetében olvashatunk.
Az LDC USB-azonosítója (Vendor ID : Product ID) \textit{03eb:f0ff}. Az USB eszköz két interfészt tartalmaz: a 0. interfészen található egy OUT/IN endpoint-pár (0x01, 0x82) a JTAG és SPI adatok átvitelére, illetve egy másik endpoint-pár (0x03 és 0x84) az I\textsuperscript{2}C és BitBang I/O átvitelekhez. Az 1. interfészen található az USART átvitel OUT/IN endpoint-párja (0x05 és 0x86). Ennek a kiosztásnak technikai okai vannak, amiről részletesebben Raikovich Tamás diplomatervének \cite{RT-dipterv} "8.2 A funkciók megvalósítása" fejezetében olvashatunk.
A legtöbb funkció Control blokkal vezérelhető. Az adatátvitelek az USART IN (0x86) végpontját kivéve (ami Interrupt transzfert használ) Bulk átvitelekkel történik. Lejjebb leírom az egyes funkciókat és az őket megvalósító URB-ket.
Amennyiben a kérés valamilyen struktúrát vár/ad vissza, azt egy ofszet$\rightarrow$mező táblázattal jelzem, majd az egyes mezők leírása következik. A táblázatban a bitmezőket "(abcd efgh)" alakban reprezentálom.
A saját implementációm hivatkozásánál a fájlok nevei és a sorszámok a kód RC3 (Release Candidate 3) verziójára érvényesek!
\subsection{Control kérések}
\subsubsection{Státusz lekérése}
A Logsys GUI működése közben figyeli az LDC állapotleíróit (kimeneti feszültségek, kifolyó áram, túláram védelem bitje stb.), ezeket az információkat másodpercenként többször is lekérdezi az eszköztől.
\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|}
\hline
irány & IN\\ \hline
bRequest & 1\\ \hline
wValue & 0\\ \hline
wIndex & 0\\ \hline
hossz & 12\\ \hline
\end{tabular}
A kérés egy struktúrát ad vissza, aminek a formátuma a következő:\\
\begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline
ofszet & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 \\ \hline
mező & \multicolumn{2}{l|}{$U_{out}$} & \multicolumn{2}{l|}{$U_{jtag}$} & \multicolumn{2}{l|}{$U_{io}$} & \multicolumn{2}{l|}{$I_{out,fine}$} & \multicolumn{2}{l|}{$I_{out}$} & (0000 0VOR) & (0JC\textsubscript{1}C\textsubscript{2} R\textsubscript{st}SE\textsubscript{1}E\textsubscript{2}) \\ \hline
\end{tabular}
\begin{itemize}
\item $U_{out}$: A kimenő feszültséget (VCC pin) figyelő ADC nyers adata
\item $U_{jtag}$: A JTREF lábon lévő feszültséget mérő ADC adata
\item $U_{io}$: Az IOREF csatlakozásra eső feszültség ADC adata
\item $I_{out,fine}$, $I_{out}$: A kifolyó áramerősséget vizsgáló két (finom és durva felbontású) ADC mért adatai
\item V: A tápellátást biztosító láb (5V jelű) logikai szintje
\item O: Túláramvédelem státuszbitje
\item R: Visszáram védelem állapotbitje
\item J: JTAG pinek (TDI, TDO, TCK, TMS) foglaltsága
\item C\textsubscript{1}: CLK1 órajelgenerátor kihasználtsága
\item C\textsubscript{2}: CLK1 négyszögjelgenerátor használtsága
\item R\textsubscript{st}: RST láb foglaltsága
\item S: Soros I/O vonalak használtsága
\item E\textsubscript{1}, E\textsubscript{2}: A 0. interfész két endpoint-párjának foglaltsága
\end{itemize}
\textbf{Implementáció}
\begin{itemize}
\item Státusz lekérdezése: \texttt{logsys\_tx\_get\_status} függvény (\textit{src/shared/control.c:7})
\item Struktúra kiosztása: \texttt{LogsysStatus} struct (\textit{include/logsys/common.h:16})
\item Struktúra feldolgozása: \textit{include/logsys/status.h} által definiált interfész (\textit{src/shared/status.c})
\end{itemize}
\pagebreak
\begin{thebibliography}{Források}
......
thesis-template-latex/src/figures/
\ No newline at end of file
Source diff could not be displayed: it is too large. Options to address this: view the blob.
Subproject commit b92adaa1a9ec5aa3aa48dc0576c39e43d758fab0
% Általános változók
\newcommand{\vikszerzoVezeteknev}{Csókás}
\newcommand{\vikszerzoKeresztnev}{Bence Viktor}
\newcommand{\vikkonzulensAMegszolitas}{dr.~}
\newcommand{\vikkonzulensAVezeteknev}{Fehér}
\newcommand{\vikkonzulensAKeresztnev}{Béla}
\newcommand{\vikkonzulensBMegszolitas}{}
\newcommand{\vikkonzulensBVezeteknev}{Raikovich}
\newcommand{\vikkonzulensBKeresztnev}{Tamás}
\newcommand{\vikkonzulensCMegszolitas}{}
\newcommand{\vikkonzulensCVezeteknev}{}
\newcommand{\vikkonzulensCKeresztnev}{}
\newcommand{\vikcim}{Logsys fejlesztőeszköz Linux környezetben} % Cím
\newcommand{\viktanszek}{\bmemit} % Tanszék
%--------------------------------------------------------------------------------------
% TDK-specifikus változók
%--------------------------------------------------------------------------------------
\newcommand{\tdkszerzoB}{} % Második szerző neve; hagyd üresen, ha egyedül írtad a TDK-t.
\newcommand{\tdkev}{2019} % A dolgozat írásának éve (pl. "2014") (Ez OTDK-nál eltérhet az aktuális évtől.)
% További adatok az OTDK címlaphoz (BME-s TDK-hoz nem kell kitölteni)
\newcommand{\tdkevfolyamA}{II} % Első szerző évfolyama, római számmal (pl. IV).
\newcommand{\tdkevfolyamB}{} % Második szerző évfolyama, római számmal (pl. III).
\newcommand{\tdkkonzulensbeosztasA}{egyetemi docens} % Első konzulens beosztása (pl. egyetemi docens)
\newcommand{\tdkkonzulensbeosztasB}{tanársegéd} % Második konzulens beosztása (pl. egyetemi docens)
% További változók
\newcommand{\szerzoMeta}{\vikszerzoVezeteknev{} \vikszerzoKeresztnev} % egy szerző esetén
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment