Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider aff28ce8 rédigé par PE Hladik's avatar PE Hladik
Parcourir les fichiers

add part 5 SPI

parent 2a7563ce
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Fichier ajouté
\documentclass[9pt]{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[frenchb]{babel}
\usepackage{graphicx}
\usepackage{multirow}
\usepackage{array}
\newcommand{\version}{{1.0.0}}
% --------- BEGIN STYLE BEAMER ---------
\usetheme{Madrid}
\definecolor{ECNBleu}{HTML}{102648}
\definecolor{ECNJaune}{HTML}{FAB600}
\setbeamercolor{frametitle}{bg=ECNBleu,fg=white} %le titre de la frame, en haut
\setbeamercolor{title in head/foot}{bg=ECNJaune,fg=ECNBleu} %barre bas, milieu
\setbeamercolor{author in head/foot}{bg=ECNBleu,fg=ECNJaune} %barre bas, gauche
\setbeamercolor{date in head/foot}{bg=ECNBleu,fg=ECNJaune} %barre bas, droit
\setbeamercolor{section in head/foot}{bg=ECNJaune,fg=ECNBleu} %haut gauche
\setbeamercolor{subsection in head/foot}{bg=ECNBleu,fg=ECNBleu} %haut droite
\setbeamercolor{title}{bg=ECNBleu,fg=white}
\setbeamercolor{block title}{fg=white,bg=ECNBleu}
%\setbeamercolor{normal text}{bg=IUTBleuFonce} %texte
\setbeamercolor{item}{bg=ECNBleu}
\setbeamercolor{subitem}{bg=ECNJaune}
\setbeamercolor{description item}{fg=couleurEmph}
\setbeamercolor{section in toc}{fg=ECNBleu}
%\setbeamercolor{subsubitem}{bg=IUTBleuFonce}
%structure (eq emph dans beamer)
\setbeamercolor{emph}{fg=couleurEmph}
% ----------------------------
\usepackage{listings}
\lstdefinestyle{customc}{
belowcaptionskip=1\baselineskip,
breaklines=true,
frame=L,
xleftmargin=\parindent,
language=C,
showstringspaces=false,
basicstyle=\tiny\ttfamily,
keywordstyle=\bfseries\color{green!40!black},
commentstyle=\itshape\color{purple!40!black},
identifierstyle=\color{blue},
stringstyle=\color{orange},
}
\lstset{escapechar=@,style=customc}
\newenvironment<>{questionblock}[1]{%
\setbeamercolor{block title}{bg=ECNJaune,fg=ECNBleu}%
\begin{block}#2{#1}}{\end{block}}
\newcommand\cad{c'est-à-dire\xspace}
\newcommand\iic{I$^2$C\xspace}
\title[SEC2 -- SINT (version \version)]{Systèmes Interconnectés}
\subtitle[\ldots]{---\\Partie 5 : SPI}
\author[P.-E. Hladik]{Pierre-Emmanuel Hladik\\\tiny pierre-emmanuel.hladik@ec-nantes.fr}
\institute[Centrale Nantes]{}
%{\tiny\date{\today}}
%\logo{
\titlegraphic{
\flushleft\includegraphics[width=3cm]{./figures-pdf/LogoCN_RVB}
}
\begin{document}
\frame{\titlepage}
% --------- Sections ---------
\section{SPI}
\subsection{Connectivité}
% ----------------------------
% --------- Sommaire ---------
\begin{frame}
\tableofcontents[currentsection, hideothersubsections, subsectionstyle=show/shaded]
\end{frame}
% ----------------------------
% --------- Introduction ---------
\begin{frame}[plain]
\frametitle{Le bus SPI en bref}
\begin{block}{Historique}
Proposé par Motorola au milieu des années 1980.
\end{block}
\begin{block}{Caratéristiques}
\begin{itemize}
\item bus série synchrone
\item un maître et des esclaves
\item mode half-duplex
\end{itemize}
\end{block}
\bigskip
Liens :
\begin{itemize}
\item \href{https:/fr.wikipedia.org/wiki/Serial_Peripheral_Interface}{https:/fr.wikipedia.org/wiki/Serial\_Peripheral\_Interface}
\item \href{https:/en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus}{https:/en.wikipedia.org/wiki/Serial\_Peripheral\_Interface\_Bus}
\end{itemize}
\end{frame}
% ----------------------------
% --------- Connexion ---------
\begin{frame}[plain]
\frametitle{Connexion du bus SPI}
Les quatre signaux :
\begin{itemize}
\item SS (Slave Select) : sélection d'un esclave ; la barre de surlignement signifie que le signal est actif au niveau bas
\item SCLK (Serial CLocK) ou SCK : horloge émise par le maître
\item MOSI (Master Out Slave In) ou SI : donnée émise par le maître à destination de l'esclave sélectionné
\item MISO (Master In Slave Out) ou SO : donnée émise par l'esclave sélectionné à destination du maître
\end{itemize}
\bigskip
%Pour communiquer il faut que la ligne SS soit sélectionnée.
\begin{center}
\includegraphics[width=.8\textwidth]{./figures-pdf/connexion}
\end{center}
\end{frame}
% ----------------------------
% --------- Sections ---------
%\section{SPI}
%\subsection{Connectivité}
\subsection{Protocole}
% ----------------------------
% --------- Sommaire ---------
\begin{frame}
\tableofcontents[currentsection, hideothersubsections, subsectionstyle=show/shaded]
\end{frame}
% ----------------------------
% --------- Protocole ---------
\begin{frame}[plain]
\frametitle{Protocole du bus SPI}
La communication est un échange de données entre le maître et l'esclave sélectionné :
\begin{itemize}
\item initialement, toutes les lignes {\bf SS} sont inactives (au niveau haut)
\item le maître met à 0 le signal {\bf SS} de l'esclave avec lequel il veut communiquer
\item le maître pousse ses données sur {\bf MOSI} de manière synchrone avec {\bf SCK}
\item l'esclave pousse ses données sur {\bf MISO} de manière synchrone avec {\bf SCK}
\item le nombre de bits échangés est généralement un multiple de 8 bits
\item quand le maître a terminé, il désactive le signal {\bf SS} de l'esclave
\end{itemize}
\bigskip
Exemple d'échange d'un octet (avec CPOL=0 et CPHA=0, voir page suivante)
\begin{center}
\includegraphics[width=.9\textwidth]{./figures-pdf/trale}
\end{center}
\end{frame}
% ----------------------------
% --------- Exemple ---------
\begin{frame}[plain]
\frametitle{Exemple}
\begin{center}
\includegraphics[width=.9\textwidth]{./figures-pdf/exmple}
\end{center}
\end{frame}
% ----------------------------
% --------- Paramètres d'un bus SPI ---------
\begin{frame}[plain]
\frametitle{Paramètres d'un bus SPI}
Trois paramètres doivent être configurés :
\begin{itemize}
\item la fréquence de l'horloge SCK,
\item la polarité de l'horloge CPOL (Clock Polarity),
\item la phase de l'horloge CPHA (Clock PHAse).
\end{itemize}
\bigskip
Un esclave impose une fréquence à ne pas dépasser pour l'horloge SCK, et des contraintes sur CPOL et CPHA ; le maître doit être programmé en conséquence.
\begin{table}[htdp]
\begin{center}
\begin{tabular}{|c|c|c|c|c|}
\hline
Mode & CPOL & CPHA & Horloge au repos & Donnée\\
\hline
0 & 0 & 0 & Niveau bas & Placée sur $\uparrow$\\
\hline
1 & 0 & 1 & Niveau bas & Placée sur $\downarrow$\\
\hline
2 & 1 & 0 & Niveau haut & Placée sur $\downarrow$\\
\hline
3 & 1 & 1 & Niveau haut & Placée sur $\uparrow$\\
\hline
\end{tabular}
\end{center}
\end{table}%
\end{frame}
% ----------------------------
% --------- CPOL et CPHA ---------
\begin{frame}[plain]
\frametitle{CPOL et CPHA}
\begin{center}
\includegraphics[width=.9\textwidth]{./figures-pdf/CPOL_CPHA}
\end{center}
Déterminer les valeurs adéquates de CPOL et CPHA est le plus « embrouillant » dans le réglage du bus SPI (les documentations des composants n'utilisent pas toujours les noms CPOL, CPHA ou encore SPI Mode...)
\end{frame}
% ----------------------------
% --------- Sections ---------
%\section{SPI}
%\subsection{Connectivité}
%\subsection{Protocole}
\subsection{Programmer le driver}
% ----------------------------
% --------- Sommaire ---------
\begin{frame}
\tableofcontents[currentsection, hideothersubsections, subsectionstyle=show/shaded]
\end{frame}
% ----------------------------
% --------- SPI matériel / SPI logiciel ---------
\begin{frame}[plain]
\frametitle{SPI matériel / SPI logiciel}
Il existe deux façons d'établir la communication :
\vspace{1em}
\begin{itemize}
\item {\bf SPI matériel :} on utilise un module SPI intégré dans le micro-contrôleur\\
{\bf Avantage :} la rapidité\\
\vspace{1em}
\item {\bf SPI logiciel :} on utilise des ports d'entrée-sortie logique quelconques\\
{\bf Avantage :} n'importe quels ports logiques peuvent être utilisés
\end{itemize}
\end{frame}
% ----------------------------
% --------- Programmer un SPI logiciel ---------
\begin{frame}[plain]
\frametitle{Programmer un SPI logiciel}
Il est possible de programmer une communication SPI par logiciel. Il suffit de quatre ports d'entrée-sortie.
\bigskip
On nomme les ports d'entrée-sortie {\bf SS}, {\bf SCK}, {\bf MOSI} et {\bf MISO}.
\bigskip
{\bf Initialisation :} Le port {\bf MISO} est programmé en entrée. Les ports {\bf SS}, {\bf SCK}, {\bf MOSI} sont programmés en sortie. {\bf SS} doit être à HIGH, {\bf SCK} à LOW [pour les modes 0 et 2, c'est-à-dire CPOL=0].
\bigskip
{\bf Effectuer une transaction :} Une transaction est un échange de données entre le maître et l'esclave :
\begin{enumerate}
\item mettre {\bf SS} à LOW
\item pour chaque bit (cet algorithme est uniquement valide pour le mode 0, c'est-à-dire CPOL=0 et CPHA=0) :
\begin{enumerate}
\item positionner le bit à transmettre sur {\bf MOSI}
\item attendre 1 $\mu$s ;
\item lire le bit reçu sur {\bf MISO} ;
\item mettre {\bf SCK} à HIGH ;
\item attendre 1 $\mu$s ;
\item mettre {\bf SCK} à LOW ;
\end{enumerate}
\item mettre {\bf SS} à HIGH.
\end{enumerate}
\end{frame}
% ----------------------------
% --------- SPI sur Arduino ---------
\begin{frame}[plain]
\frametitle{SPI sur Arduino}
Le SPI matériel utilise un module SPI intégré dans le micro-contrôleur. On a donc un choix
limité des ports d'entrée-sortie. La librairie {\tt SPI} sur Arduino gère le SPI.
\begin{alertblock}{}
Attention, la librairie SPI ne prend pas en charge le signal SS : il faut le gérer soi-même.
\end{alertblock}
{\bf Importer la librairie SPI :}\\
\#include <SPI.h>
\bigskip
{\bf Configurer la librairie SPI (à effectuer dans la fonction {\tt setup}) :}\\
SPI.begin () ;
\bigskip
{\bf Effectuer une transaction :} une transaction est un échange de données entre le maître et l'esclave :
\begin{enumerate}
\item mettre {\bf SS} à LOW
\item appeler {\tt SPI.beginTransaction()}
\item appeler {\tt SPI.transfer()} (échange d'un octet) autant de fois qu'il y a d'octets à échanger, la donnée reçue est la valeur retournée par la fonction
\item appeler {\tt SPI.endTransaction ()}
\item mettre {\bf SS} à HIGH
\end{enumerate}
\end{frame}
% ----------------------------
% --------- Sections ---------
%\section{SPI}
%\subsection{Connectivité}
%\subsection{Protocole}
%\subsection{Programmer le driver}
\subsection{SPI sur la carte Feather}
% ----------------------------
% --------- Sommaire ---------
\begin{frame}
\tableofcontents[currentsection, hideothersubsections, subsectionstyle=show/shaded]
\end{frame}
% ----------------------------
% --------- Liaison SPI de la carte Feather M0 Wifi ---------
\begin{frame}[plain]
\frametitle{Liaison SPI de la carte Feather M0 Wifi}
\begin{center}
\includegraphics[width=.9\textwidth]{./figures-pdf/feather}
\end{center}
\end{frame}
% ----------------------------
% --------- MCP2515 sur la carte Feather M0 Wifi---------
\begin{frame}[plain]
\frametitle{MCP2515 sur la carte Feather M0 Wifi}
Sur la carte Feather M0 Wifi, le bus SPI est utilisé pour connecter un contrôleur CAN, le MCP2515 de Microship.
\begin{center}
\includegraphics[width=.8\textwidth]{./figures-pdf/MCP2515}
\end{center}
\end{frame}
% ----------------------------
% --------- MCP2515 sur la carte Feather M0 Wifi---------
\begin{frame}[plain]
\frametitle{MCP2515 sur la carte Feather M0 Wifi}
Les ports 10, 11 et 12 ont été choisis car ils peuvent être sélectionnés aussi pour une liaison SPI logicielle que pour une liaison SPI matérielle.
\bigskip
\begin{center}
\includegraphics[width=.8\textwidth]{./figures-pdf/feather_MCP}
\end{center}
\end{frame}
% ----------------------------
% --------- Registres du MCP2515---------
\begin{frame}[plain]
\frametitle{Registres du MCP2515}
Le MCP 2515 contient un nombre important de registres qui permettent de configurer le composant, d'envoyer des messages CAN et d'en recevoir.
\bigskip
\begin{center}
\includegraphics[width=.8\textwidth]{./figures-pdf/registers}
\end{center}
\end{frame}
% ----------------------------
% --------- Écrire un registre du MCP2515 ---------
\begin{frame}[plain]
\frametitle{Écrire un registre du MCP2515}
Pour écrire un registre, il faut envoyer successivement trois octets :
\begin{enumerate}
\item l'instruction d'écriture (un octet égal à 0x02)
\item l'adresse du registre
\item la donnée à écrire
\end{enumerate}
\bigskip
\begin{center}
\includegraphics[width=.9\textwidth]{./figures-pdf/write}
\end{center}
Par exemple, pour écrire 0x55 dans le registre TXB0D0, il faut envoyer les trois octets : 0x02, 0x36, 0x55.
\end{frame}
% ----------------------------
% --------- Lire un registre du MCP2515 ---------
\begin{frame}[plain]
\frametitle{Lire un registre du MCP2515}
Pour lire un registre, il faut envoyer successivement trois octets :
\begin{enumerate}
\item l'instruction de lecture (un octet égal à 0x03)
\item l'adresse du registre
\item un octet quelconque tout en lisant le contenu du registre {\tt MISO}
\end{enumerate}
\bigskip
\begin{center}
\includegraphics[width=.9\textwidth]{./figures-pdf/read}
\end{center}
Par exemple, pour lire le registre TXB0D0, il faut envoyer les trois octets : 0x03, 0x36, et une valeur quelconque.
\end{frame}
% ----------------------------
\end{document}
\ No newline at end of file
part5-SPI/figures-pdf/CPOL_CPHA.png

39,3 ko

part5-SPI/figures-pdf/LogoCN_RVB.jpg

217 ko

part5-SPI/figures-pdf/MCP2515.png

120 ko

part5-SPI/figures-pdf/connexion.png

37,3 ko

part5-SPI/figures-pdf/exmple.png

9,28 ko

part5-SPI/figures-pdf/feather.png

233 ko

part5-SPI/figures-pdf/feather_MCP.png

21 ko

part5-SPI/figures-pdf/read.png

63,9 ko

part5-SPI/figures-pdf/registers.png

290 ko

part5-SPI/figures-pdf/trale.png

11,2 ko

part5-SPI/figures-pdf/write.png

65,2 ko

Fichier ajouté
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter