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:
\noindentAz 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:
@@ -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:
@@ -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 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.)
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).