diff --git a/Logsys-Linux.tex b/Logsys-Linux.tex index 919870bde67fd3c6bb2f4f754d45f51bcf0213ac..1f52966cf67ac77d7d7cd86096a360a1c37d7433 100644 --- a/Logsys-Linux.tex +++ b/Logsys-Linux.tex @@ -460,7 +460,77 @@ A libxsvf-nek köszönhetően SVF és XSVF formátumú fájlokat képes a progra \end{itemize} \subsubsection{SPI} -% TODO +Az LDC képes SPI (Serial Peripheral Interface) master módban működni (a csatlakoztatott programozható eszköz lesz a slave), a MISO, MOSI, CLK és IOREF lábakat használva. Így egyszerű (az USART-nál könnyebben implementálható) soros adatátviteli összeköttetést tudunk létesíteni a számítógép és a fejlesztői kártya közt. Valamint a Logsys FPGA kártyákon található flash csipek is SPI interfészen írhatók, illetve ezen keresztül tudják az FPGA-t is konfigurálni. + +Az implementációt a flash chipek felprogramozását végző Windowsos segédprogram (Logsys FLASH\cite{LS-flash}) visszafejtéséből nyertem. A RC3 verziónak nem része, a következő kiadásban fogom megjelentetni. + +Az adatátvitel történhet 8, 4, 2 vagy 1 MHz-es órajel mellett, ezenfelül többféle módot támogat, amit nem sikerült visszafejtenem. Az adatok átviteléhez a 0x01/0x82-es Bulk endpoint-párt használja. + +Az átvitel a következő két kéréssel nyitható meg: + +\noindent\textbf{URB Control blokk:}\\ +\begin{tabular}{|l|l|l|} + \hline + \textit{Művelet} & \textit{Inicializálás} & \textit{Átvitel indítása}\\ \hhline{|=|=|=|} + irány & IN & OUT\\ \hline + bRequest & 32 & 34\\ \hline + wValue & $freq$ & 0\\ \hline + wIndex & mód & 0\\ \hline + hossz & 1 & 0\\ \hline +\end{tabular} + +A $freq$ mezőben jobbról 0, 1, 2 vagy 3 db 1-es bit lép be attól függően, hogy a CLK frekvenciát 8, 4, 2 vagy 1 MHz-en akarjuk használni. Az IN kérés a sikerességet adja vissza. + +Ezután az adatátvitel egy 5 bájtos header kiküldésével kezdődik a 0x01-es USB végponton: + +\noindent\begin{tabular}{|l|l|l|l|l|l|} + \hline + ofszet & 0 & 1 & 2 & 3 & 4\\ \hline + mező & \multicolumn{4}{l|}{Adatblokk hossza} & 0x01\\ \hline +\end{tabular} + +Majd pedig az adatblokk következik, ugyanezen a végponton: + +\noindent\begin{tabular}{|l|l|l|} + \hline + ofszet & 0 & 1 \dots \\ \hline + mező & parancs & adatok\\ \hline +\end{tabular} + +Majd a 0x82-es végpontról szintén Bulk átvitellel visszaolvassuk a státuszkódot és a vett adatokat: + +\noindent\begin{tabular}{|l|l|l|} + \hline + ofszet & 0 & 1 \dots \\ \hline + mező & státusz & adatok\\ \hline +\end{tabular} + +\noindent Ezt a műveletsort végzi el nekünk a \texttt{logsys\_spi\_cmd} függvény. + +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{SPI bezárás}\\ \hhline{|=|=|} + irány & OUT\\ \hline + bRequest & 33\\ \hline + wValue & 0\\ \hline + wIndex & 0\\ \hline + hossz & 0\\ \hline +\end{tabular} + +\noindent\textbf{Implementáció} +Az implementáció nem része a RC3-as verziónak. A sorszámok a \texttt{644e06153c1351cc038acfa3bf2212f86500aa48}-as commitra értendőek. +\begin{itemize} + \item Megnyitás: \texttt{logsys\_spi\_begin} (\textit{include/logsys/serio.h:124}, implementáció: \textit{src/shared/serio.c:67}) + \item Lezárás: \texttt{logsys\_spi\_end} (\textit{include/logsys/serio.h:126}, implementáció: \textit{src/shared/serio.c:73}) + \item Parancs küldés: \texttt{logsys\_spi\_cmd} (\textit{include/logsys/serio.h:129}, implementáció: \textit{src/shared/serio.c:77}) + \item SPI órajel: \texttt{enum LogsysSpiSpeed} (\textit{include/logsys/serio.h:53}) + \item SPI mód (tartalma ismeretlen): \texttt{enum LogsysSpiMode} (\textit{include/logsys/serio.h:61}) + \item SPI parancsok: \texttt{enum LogsysSpiCmd} (\textit{include/logsys/serio.h:64}) +\end{itemize} + \subsubsection{USART} % TODO @@ -511,5 +581,8 @@ A program forráskódja a \textit{src/test/usbtest.c}. Linux (64 bit) alatt\\ Csókás Bence Viktor\\ \url{http://users.hszk.bme.hu/~cb1719/dlc/Xilinx_Linux.pdf} + + \bibitem{LS-flash} Logsys FLASH\\ + \url{http://logsys.mit.bme.hu/sites/default/files/page/2009/09/LogsysFLASH_20121015.zip} \end{thebibliography} \end{document}