# Descrição geral

Arquitetura "Master-Slave" com ligação ponto a ponto

Comunicação bidirecional _**full-duplex**_

**Comunicação síncrona** (relógio explícito do master)

* **Relógio é gerado pelo master** que o disponibiliza para todos os slaves
* Não é exigida precisão ao relógio - os bits vão sendo transferidos a cada transição de relógio. Isto permite utilizar um oscilador de baixo custo no master (não é necessário um cristal de quartzo)

Fácil de implementar por hardware ou por software

Não são necessários "line drivers" (ou "transceivers“) - circuitos de adaptação ao meio de transmissão

Arquitetura "Master-Slave"

* **O sistema só pode ter um master**
* O master é o único dispositivo no sistema que pode controlar o relógio

Um master pode estar ligado a vários slaves: para cada comunicação, apenas 1 slave é selecionado pelo master

O master inicia e controla a transferência de dados

Sinalização:

* SCK - clock
  * Relógio gerado pelo master que sincroniza a transmissão/receção de dados
* **MOSI** – **Master Output Slave Input** (SDO no master)
  * Linha do master para envio de dados para o slave
* **MISO** – **Master Input Slave Output** (SDI no master)
  * Linha do slave para enviar dados para o master
* SS – Slave Select
  * Linha do master que seleciona o slave com quem vai comunicar

## Esquema de princípio

<figure><img src="https://1103423335-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvyEajzuIz0PAtDiV6JcU%2Fuploads%2F0WohpvJLFuf4qEZLUFLh%2F2024-06-19_14-23.png?alt=media&#x26;token=3f1e3220-b514-41f8-ba2f-06e192cbe082" alt=""><figcaption></figcaption></figure>

Transmissão "full-duplex" baseada em dois shift-registers (um no master e outro no slave)

Em cada ciclo de relógio:

* O master coloca 1 bit na linha MOSI e o slave recebe-o
* O slave coloca 1 bit na linha MISO e o master recebe-o

Ao fim de N ciclos de relógio o master enviou uma palavra de N bits e recebeu do slave uma palavra com a mesma dimensão – "Data Exchange"

Esta sequência é realizada mesmo quando é pretendida uma comunicação unidirecional

## Sinalização

<figure><img src="https://1103423335-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvyEajzuIz0PAtDiV6JcU%2Fuploads%2FnXhiE1cbPrYiN9Cbm296%2F2024-06-19_14-28.png?alt=media&#x26;token=8ed2efae-6332-4384-a0cb-c81b5ee3224c" alt=""><figcaption></figcaption></figure>

Dados:

* MOSI – Master Output Slave Input (SDO – serial data out no master)
* MISO – Master Input Slave Output (SDI – serial data in no master)

Controlo:

* SS – Slave select (sinal ativado pelo master para selecionar o slave com quem vai comunicar)
* SCK – serial clock

<figure><img src="https://1103423335-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FvyEajzuIz0PAtDiV6JcU%2Fuploads%2F0ZKKN50U9HdAvZIZZiu6%2F2024-06-19_14-29.png?alt=media&#x26;token=c52fa19b-475a-498e-85c7-cdbdaeb36447" alt=""><figcaption></figcaption></figure>

O sinal de relógio tem um "duty-cycle" de 50%

No exemplo da figura:

* master e slave usam a transição negativa do relógio para colocarem 1 bit na linha (master na linha MOSI, slave na linha MISO)
* Na transição positiva seguinte, o master armazena o valor presente na linha MISO e o slave armazena o valor que se encontra na linha MOSI
