Skip to content
Snippets Groups Projects
Commit 22ba2442 authored by Bence Cs's avatar Bence Cs
Browse files

USART

parent 64303b15
Branches
No related tags found
No related merge requests found
...@@ -170,7 +170,7 @@ A Logsys GUI működése közben figyeli az LDC állapotleíróit (kimeneti fesz ...@@ -170,7 +170,7 @@ A Logsys GUI működése közben figyeli az LDC állapotleíróit (kimeneti fesz
hossz & 12\\ \hline hossz & 12\\ \hline
\end{tabular} \end{tabular}
\noindent A kérés egy struktúrát ad vissza, aminek a formátuma a következő:\\ 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|} \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline \hline
ofszet & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 \\ \hline ofszet & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 \\ \hline
...@@ -217,7 +217,7 @@ A tápfeszültséget lehet be- illetve kikapcsolni, a túláram- és visszáram ...@@ -217,7 +217,7 @@ A tápfeszültséget lehet be- illetve kikapcsolni, a túláram- és visszáram
hossz & 1 & 0\\ \hline hossz & 1 & 0\\ \hline
\end{tabular} \end{tabular}
\noindent Az IN kérés egy egybájtos logikai értéket (bool) ad vissza. Az IN kérés egy egybájtos logikai értéket (bool) ad vissza.
\noindent\textbf{Implementáció} \noindent\textbf{Implementáció}
\begin{itemize} \begin{itemize}
...@@ -259,8 +259,8 @@ Az IN kérés egy 0-2 közötti számot ad vissza, ami a 450, 700 illetve 950 mA ...@@ -259,8 +259,8 @@ Az IN kérés egy 0-2 közötti számot ad vissza, ami a 450, 700 illetve 950 mA
hossz & 21\\ \hline hossz & 21\\ \hline
\end{tabular} \end{tabular}
\noindent Az IN kérés által visszaadott struktúrát nem implementáltam, de a következőképpen néz ki:\\ Az IN kérés által visszaadott struktúrát nem implementáltam, de a következőképpen néz ki:\\
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|} \begin{tabular}{|l|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline \hline
ofszet & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 20\\ \hline ofszet & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19 & 20\\ \hline
mező & H & \multicolumn{4}{l|}{$c_{U_{out}}$} & \multicolumn{4}{l|}{$c_{U_{jtag}}$} & \multicolumn{4}{l|}{$c_{U_{io}}$} & \multicolumn{4}{l|}{$c_{I_{out,fine}}$} & \multicolumn{4}{l|}{$c_{I_{out}}$} \\\hline mező & H & \multicolumn{4}{l|}{$c_{U_{out}}$} & \multicolumn{4}{l|}{$c_{U_{jtag}}$} & \multicolumn{4}{l|}{$c_{U_{io}}$} & \multicolumn{4}{l|}{$c_{I_{out,fine}}$} & \multicolumn{4}{l|}{$c_{I_{out}}$} \\\hline
...@@ -363,7 +363,7 @@ Ha nincs a RST lábat használó átvitel megnyitva, lehetőségünk van aszinkr ...@@ -363,7 +363,7 @@ Ha nincs a RST lábat használó átvitel megnyitva, lehetőségünk van aszinkr
% TODO % 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. 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\\A JTAG megnyitásához két Control blokkot kell kiadnunk:
\noindent\textbf{URB Control blokk:}\\ \noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|l|} \begin{tabular}{|l|l|l|}
...@@ -380,7 +380,7 @@ A JTAG megnyitásához két Control blokkot kell kiadnunk: ...@@ -380,7 +380,7 @@ A JTAG megnyitásához két Control blokkot kell kiadnunk:
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ó. 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\\Az átvitel bezárásához a következő kérést használjuk:
\noindent\textbf{URB Control blokk:}\\ \noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|} \begin{tabular}{|l|l|}
...@@ -409,7 +409,7 @@ A LDC kétféle módban tudja a JTAG interfészt kezelni: ...@@ -409,7 +409,7 @@ A LDC kétféle módban tudja a JTAG interfészt kezelni:
\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) \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} \end{itemize}
Az ellenőrzést a következő kéréssel végezzük: \noindent Az ellenőrzést a következő kéréssel végezzük:
\noindent\textbf{URB Control blokk:}\\ \noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|} \begin{tabular}{|l|l|}
...@@ -422,7 +422,7 @@ Az ellenőrzést a következő kéréssel végezzük: ...@@ -422,7 +422,7 @@ Az ellenőrzést a következő kéréssel végezzük:
hossz & 1\\ \hline hossz & 1\\ \hline
\end{tabular} \end{tabular}
A módot megnyitott átvitel esetén is átválthatjuk: \noindent\\\\A módot megnyitott átvitel esetén is átválthatjuk:
\noindent\textbf{URB Control blokk:}\\ \noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|l|} \begin{tabular}{|l|l|l|}
...@@ -435,6 +435,7 @@ A módot megnyitott átvitel esetén is átválthatjuk: ...@@ -435,6 +435,7 @@ A módot megnyitott átvitel esetén is átválthatjuk:
hossz & 1 & 0\\ \hline hossz & 1 & 0\\ \hline
\end{tabular} \end{tabular}
\noindent\textbf{Implementáció}
\begin{itemize} \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 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 Enumeráció: \texttt{enum LogsysJtagMode} (\textit{include/logsys/common.h:42})
...@@ -460,13 +461,13 @@ A libxsvf-nek köszönhetően SVF és XSVF formátumú fájlokat képes a progra ...@@ -460,13 +461,13 @@ A libxsvf-nek köszönhetően SVF és XSVF formátumú fájlokat képes a progra
\end{itemize} \end{itemize}
\subsubsection{SPI} \subsubsection{SPI}
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 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, RST é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 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 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\\Az átvitel a következő két kéréssel nyitható meg:
\noindent\textbf{URB Control blokk:}\\ \noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|l|} \begin{tabular}{|l|l|l|}
...@@ -481,9 +482,9 @@ Az átvitel a következő két kéréssel nyitható meg: ...@@ -481,9 +482,9 @@ Az átvitel a következő két kéréssel nyitható meg:
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. 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\\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|} \noindent\begin{tabular}{|l|c|c|c|c|c|}
\hline \hline
ofszet & 0 & 1 & 2 & 3 & 4\\ \hline ofszet & 0 & 1 & 2 & 3 & 4\\ \hline
mező & \multicolumn{4}{l|}{Adatblokk hossza} & 0x01\\ \hline mező & \multicolumn{4}{l|}{Adatblokk hossza} & 0x01\\ \hline
...@@ -491,7 +492,7 @@ Ezután az adatátvitel egy 5 bájtos header kiküldésével kezdődik a 0x01-es ...@@ -491,7 +492,7 @@ Ezután az adatátvitel egy 5 bájtos header kiküldésével kezdődik a 0x01-es
Majd pedig az adatblokk következik, ugyanezen a végponton: Majd pedig az adatblokk következik, ugyanezen a végponton:
\noindent\begin{tabular}{|l|l|l|} \noindent\begin{tabular}{|l|c|c|}
\hline \hline
ofszet & 0 & 1 \dots \\ \hline ofszet & 0 & 1 \dots \\ \hline
mező & parancs & adatok\\ \hline mező & parancs & adatok\\ \hline
...@@ -499,7 +500,7 @@ Majd pedig az adatblokk következik, ugyanezen a végponton: ...@@ -499,7 +500,7 @@ Majd pedig az adatblokk következik, ugyanezen a végponton:
Majd a 0x82-es végpontról szintén Bulk átvitellel visszaolvassuk a státuszkódot és a vett adatokat: 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|} \noindent\begin{tabular}{|l|c|c|}
\hline \hline
ofszet & 0 & 1 \dots \\ \hline ofszet & 0 & 1 \dots \\ \hline
mező & státusz & adatok\\ \hline mező & státusz & adatok\\ \hline
...@@ -507,7 +508,7 @@ Majd a 0x82-es végpontról szintén Bulk átvitellel visszaolvassuk a státuszk ...@@ -507,7 +508,7 @@ Majd a 0x82-es végpontról szintén Bulk átvitellel visszaolvassuk a státuszk
\noindent Ezt a műveletsort végzi el nekünk a \texttt{logsys\_spi\_cmd} függvény. \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\\Az átvitel bezárásához a következő kérést használjuk:
\noindent\textbf{URB Control blokk:}\\ \noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|} \begin{tabular}{|l|l|}
...@@ -532,7 +533,70 @@ Az átvitel bezárásához a következő kérést használjuk: ...@@ -532,7 +533,70 @@ Az átvitel bezárásához a következő kérést használjuk:
\end{itemize} \end{itemize}
\subsubsection{USART} \subsubsection{USART}
% TODO Az USART (Universal Synchronous/Asynchronous Receive \& Transmit) adatátvitellel általános célú full duplex soros kapcsolatot létesíthetünk a számítógép és a céleszköz között. Az LDC képes hardveresen kezelni az USART átviteleket, a MOSI (TX), MISO (RX), CLK (csak USRT mód esetén) és IOREF lábakon keresztül.
\noindent\\Az átvitel indítása a következő kérésekkel történik:
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|l|l|}
\hline
\textit{Művelet} & \textit{Inicializálás} & \textit{Órajel megadása} & \textit{Vonali kódolás beállítása}\\ \hhline{|=|=|=|=|}
irány & IN & OUT & OUT\\ \hline
bRequest & 49 & 53 & 54\\ \hline
wValue & USRT mód & periódusregiszter & kódolás\\ \hline
wIndex & 0 & 0 & paritásbitek\\ \hline
hossz & 1 & 0 & 0\\ \hline
\end{tabular}
\noindent Az IN által visszaadott bájt a kérés sikerességét jelzi. A vonali kódolás paramétereinek beállítására enumerációkat hoztam létre.
A portra való írás egy egyszerű Bulk átvitellel történik a 0x05-ös végponton. Olvasás esetén azonban figyeljünk arra, hogy a 0x86-os endpointról való olvasás első bájtja egy státuszbájt! Ez a státusz egy bitmező, jelentése a \texttt{LogsysUsartStatus} enumerációban található.
\noindent\\Az átvitelt ezzel a kéréssel zárhatjuk be:
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|}
\hline
\textit{Művelet} & \textit{Bezárás}\\ \hhline{|=|=|}
irány & OUT\\ \hline
bRequest & 50\\ \hline
wValue & 0\\ \hline
wIndex & 0\\ \hline
hossz & 0\\ \hline
\end{tabular}
\noindent\\Illetve lehetőségünk van a soros port képességeinek lekérésére (minimális és maximális baudráta, órajel stb.)
\noindent\textbf{URB Control blokk:}\\
\begin{tabular}{|l|l|}
\hline
\textit{Művelet} & \textit{Képességek lekérdezése}\\ \hhline{|=|=|}
irány & IN\\ \hline
bRequest & 48\\ \hline
wValue & 0\\ \hline
wIndex & 0\\ \hline
hossz & 24\\ \hline
\end{tabular}
\noindent Ez egy ilyen struktúrát ad vissza:
\noindent\begin{tabular}{|l|c|c|c|c|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 & 12 & 13 \dots 21 & 22 & 23\\\hline
mező & \multicolumn{4}{c|}{órajel} & előosztás & \multicolumn{4}{c|}{min. baud/s} & \multicolumn{4}{c|}{max. baud/s} & & major verzió & minor verzió \\\hline
\end{tabular}
\noindent\textbf{Implementáció}
\begin{itemize}
\item Megnyitás: \texttt{logsys\_usart\_begin} (\textit{include/logsys/serio.h:103}, implementáció: \textit{src/shared/serio.c:36})
\item Lezárás: \texttt{logsys\_usart\_end} (\textit{include/logsys/serio.h:105}, implementáció: \textit{src/shared/serio.c:49})
\item Beolvasás: \texttt{logsys\_usart\_getstr} (\textit{include/logsys/serio.h:114}, implementáció: \textit{src/shared/serio.c:53})
\item Kiírás: \texttt{logsys\_usart\_putstr} (\textit{include/logsys/serio.h:121}, implementáció: \textit{src/shared/serio.c:63})
\item Vonali kódolás: \texttt{enum LogsysUsartEncoding} (\textit{include/logsys/serio.h:41})
\item Paritás: \texttt{enum LogsysUsartParity} (\textit{include/logsys/serio.h:48})
\item USART képességek: \texttt{logsys\_usart\_get\_caps} (\textit{include/logsys/serio.h:100}, implementáció: \textit{src/shared/serio.c:32}), \texttt{struct LogsysUsartCaps} (\textit{include/logsys/serio.h:30})
\item Státuszkódok: \texttt{enum LogsysUsartStatus} (\textit{include/logsys/serio.h:21})
\end{itemize}
\subsubsection{BitBang soros I/O} \subsubsection{BitBang soros I/O}
A LDC képes a MISO, MOSI, CLK, RST és IOREF lábait használva szinkron BitBang típusú soros adatátvitelre. Ezzel szinte bármilyen adatátviteli protokoll szimulálható, azonban legfeljebb ~1 kHz-es órajel mellett (a nagy USB adatforgalom miatt). A LDC képes a MISO, MOSI, CLK, RST és IOREF lábait használva szinkron BitBang típusú soros adatátvitelre. Ezzel szinte bármilyen adatátviteli protokoll szimulálható, azonban legfeljebb ~1 kHz-es órajel mellett (a nagy USB adatforgalom miatt).
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment