Kysymys:
Voiko SPI-orja aloittaa lähetyksen full-duplex-tilassa?
JeJoRic
2019-08-09 20:45:20 UTC
view on stackexchange narkive permalink

Sikäli kuin tiedän, SPI-orjan SPI-lähetys toimii kuten alla:

  1. Master valitsee orjan SS-nastalla
  2. Päällikkö ja orja lähettävät tietoja toisilleen samanaikaisesti
  3. Master aloittaa kellon ja tiedonsiirron samanaikaisesti (kelloa ei ole ennen kirjoitusoperaatiota)
  4. Päällikkö lopettaa lähetyksen milloin tahansa (lopettamalla kirjoitusoperaation ja kellonmuodostuksen), vaikka orjalla olisi enemmän lähetettävää dataa.

Onko SPI-orja-asetuksia, joiden avulla orja voi lähettää tietoja ilman isännän lupaa?

Ajattelen vain ääneen. Oletetaan, että orjia on vain yksi ja isäntäkone tarjoaa jatkuvan kellon.

Vaikka oletettu lauseke olisi totta, älä isäntä ja orja menetä tavujen synkronointia (ts. vastaanottaa bittivirtaa), koska SPI: lle ei ole start-stop-bittejä?

Esitän tällaisen kysymyksen, koska olen lukenut seuraavan osan tästä asiakirjasta.

2.2 SPI -esimerkki

Liitteenä oleva SPI-esimerkki kuvaa USART-sovelluksen käyttöä synkroninen tila. USART1 on määritetty orjaksi, kun taas USART2 on hallita. Seuraavat tapahtumat tapahtuvat:

  • Tiedonsiirto isännältä orjalle.
  • Tiedonsiirto orjalta isännälle.
  • Tiedonsiirto isännältä orjalle ja orjalta isännälle samanaikaisesti.

Asiakirjassa on SPI-esimerkki, mutta esimerkki toteutetaan USART-laitteilla. Ja saan selville, että USART-orja voi aloittaa lähetyksen ilman päällikön lupaa.

En löytänyt lähdekoodia, johon asiakirja viittaa.

Orja ei määritelmän mukaan voi aloittaa tapahtumaa (se voi kuitenkin pystyä keskeyttämään isännän saadakseen tapahtuman alkamaan).
Yksisuuntainen tiedonsiirto perinteisessä SPI: ssä on vain joku, joka * jättää huomiotta * toiseen suuntaan menevän linjan tilan.Kirjoitus, lukeminen ja kaksisuuntainen siirto eivät ole oikeastaan mitään eroa.Itse asiassa esimerkiksi monet SPI-oheislaitteet kellottavat tilasanan ensimmäisen sanan aikana, ennen kuin he edes tietävät mitä pyydetään, koska se ei maksa mitään tekemättä ja mahdollistaa nopean tilan kyselyn.
Kaksi vastused:
bitsmack
2019-08-09 20:54:19 UTC
view on stackexchange narkive permalink

Ei, SPI: n avulla kaikki viestinnät ohjataan päälaitteella. Olet oikeassa, että isäntä ei voi yksinkertaisesti tarjota jatkuvaa kelloa; tavun rajoja ei olisi mahdollista havaita.

Orjalaitteella on usein erillinen ulostulotapa ilmoittaakseen isännälle, että sillä on tietoja käytettävissä. Tämä nasta on kytketty mikrokontrollerin tuloon ja sitä käytetään usein keskeytyksenä.

Sitten laite voi puolustaa nastaa, mikä saa mikrokontrollerin pyörimään SPI-väylää.


Lisätietoja saat lukemalla :) Tämä on hieman muokattu versio selityksestä, joka löytyy täältä:

Orjalaite voi kommunikoida vain, kun sille annetaan kello isännältä. Tämä vaikeuttaa lukemista orjalta, koska sinun on saatava isäntä tarjoamaan riittävästi kellojaksoja, jotta orja voi vastata.

Kun lähetät SPI-komennon isännältä, kaksi lähetystä tapahtuu tosiasiallisesti samojen kahdeksan kellopulssin aikana. Ensimmäinen on se, että tavu ajoitetaan ulos MOSI-linjasta. Mutta samaan aikaan tietoja ajetaan mikrokontrolleriin MISO-linjan kautta.

Mutta koska orja saa täydellisen komennon vasta näiden tapahtumien loppuun mennessä, se ei esitä tietoja väylälle. Tämän seurauksena vastaanotettu arvo on 0x00 tai 0xFF.

Sitten sinun on annettava vielä kahdeksan kelloa, jotta orja voi palauttaa todellisen arvon. Monissa kooditoteutuksissa tämä tapahtuu lähettämällä orjalle "nuken tavu".

Huomaa, että ensimmäisessä lähetyksessä päällikkö jättää huomioimatta kaikki orjalta saapuvat. Toisessa lähetyksessä orja jättää huomiotta kaiken, mitä isäntä lähettää.

Se kuvaa yleistä tapausta. Monimutkaisuutta voi olla enemmän. Esimerkiksi jotkut orja-IC: t tuottavat itse asiassa jonkinlaisen tilatavun samalla, kun ne vastaanottavat komennon isännältä. Joten tässä tapauksessa päällikön ei pitäisi hylätä ensimmäistä vastaanotettua tavua.

"päällikkö ei voi yksinkertaisesti tarjota jatkuvaa kelloa" Olen itse asiassa nähnyt aivan liian kauan sitten laitteen, joka tekee juuri sen.Se oli outo pieni peto.En valitettavasti muista P / N: tä.
@Aaron Hyvä tietää!Ihmiset tulevat yhä älykkäämpiä :-)
Justme
2019-08-09 21:21:20 UTC
view on stackexchange narkive permalink

Ei, master on se, joka välittää siruvalinnat ja ajaa kelloa.Orja kuuntelee aina vain kelloa ja siruvalintaa.Tiedonsiirto voi olla vielä kaksisuuntainen.On joitain toteutuksia, joissa kello voi olla jatkuva, mutta sillä ei ole väliä paljoa, koska siruvalintaa käytetään tavujen rajojen synkronointiin joka tapauksessa.Mutta sitten on olemassa multimaster-järjestelmiä, joten periaatteessa sinulla voi olla jokin mekanismi laitteille, jotka päättävät, kuka on orja ja isäntä.Tai liitä vain erillinen "keskeytys" -johto orjalle ilmoittamaan isännälle, että sillä on isäntälle datapaketti.

Voisitko lisätä esimerkin multimaster-järjestelmästä?


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 4.0-lisenssistä, jolla sitä jaetaan.
Loading...