Genelec GLM -väylän datan lukeminen– osa 2 

Edellisessä osassa kävin läpi, kuinka dekoodausprojekti lähti liikkeelle. Nyt on raudan vuoro, eli millä viestit saadaan luettua, ja ehkäpä joskus vielä dekoodattua.

GLM:n käyttämä väylänopeus on hyvin erikoinen, 296000. Lisäksi 9N2 on sekin harvinaisempi, eikä kaikki mikrokontrollerit osaa tätä, ainakaan natiivisti.

Myöskään Raspberry Pi Pico 2:n UART ei natiivisti tue yhdeksää databittiä, mutta tämä on mahdollista saada toimimaan PIO:n avulla. Käytännössä siis bitit luetaan väylältä ohjelmallisesti. Tämä syö jonkin verran suorituskykyä, mutta tähän mennessä teho ei ole loppunut kesken. Pientä hidastumista on ollut toisinaan havaittavissa, kun monenlaisia juttuja on tullut testattua. Tämäkin hidastelu poistui, kun siirsin pelkän vastaanoton pyörimään Picon toiselle ytimelle.

Tässä osassa käsitellään vain Pico 2:n rautaa, sen kytkentää RS-485-muuntimeen ja edelleen RJ-45-liittimeen. Varsinainen analyysiohjelmisto jää seuraavaan osaan. Pico2:n firmis löytyy tästä blogauksesta, eli pääset kaappaamaan dataa vaikka heti.

Rauta

Hyvä uutinen on, että rauta on yksinkertainen. Väylää ainoastaan kuunnellaan, joten lähetyssuuntaa ei tarvitse ohjata mitenkään. Tällöin ei ole vaaraa että vahingossa menisi sotkemaan oikean GLM-järjestelmän toimintaa.

Kokonaisuus koostuu kolmesta osasta. Ensimmäinen on RJ-45-liitin, josta väylä tuodaan sisään. Differentiaalinen RS-485-signaali kulkee navoilla 1 (D+/A) ja 2 (D−/B).

Toinen osa on halpa TTL-RS-485-muunnin, jossa on MAX3485-piiri (noin neljä euroa). Se muuttaa väylän differentiaalisen signaalin 3,3 voltin logiikkatasoksi.

Kolmas on Pico 2, joka lukee muuntimen lähdön ja lähettää kehykset USB:llä tietokoneelle.

Kasaaminen

RJ-45:n pinni 1 menee 485-moduulin D+/A-liittimeen ja pinni 2 liittimeen D−/B. TTL-puolella VCC menee Picon 3,3 voltin ulostuloon ja GND Picon maahan. TXD-pinni, joka antaa vastaanotetun datan ulos, kytketään Picon GP1-nastaan. RXD-pinni, eli moduulin lähetystulon jätin kytkemättä, sillä TX valo syttyy ja väyläliikenne häiriintyy.

RS-485-puolen GND jää niin ikään kytkemättä, eikä RJ-45:n pinniä 8, eli väylän maata, ole kytketty mihinkään. Tämän kytkemisellä ei toisaalta ole haittavaikutuksiakaan.

485:n käyttöjännite on kytketty Picon 3,3V ulostuloon, sillä Picon GPIO nasta ei kestä 5V jännitettä. Moduulissa on automaattinen suunnanohjaus, joten erillisiä DE- ja RE-nastoja ei ole.

Johdotus: RXD ja RS-485-puolen GND jäävät kytkemättä.

Kytkeminen väylään

Väylässä on normaalisti 120 ohmin päätevastukset molemmissa päissä, molemmat sijaitsee GLM-adapterissa: kaapeli kulkee hubilta kaiuttimelle toiselle, ja viimeisen kaiuttimen kaapeli palaa takaisin hubiin. Omassa kytkennässäni Pico on kytketty linjan viimeiseksi laitteeksi, eikä linjaa ole johdettu takaisin hubille. Päätevastus on siis vain lähettävässä päässä, enkä ole lisännyt omaa vastusta kuuntelijan päähän. Moduulissa on valmiina 120 ohmin päätevastus, mutta se on oletuksena pois päältä ja kytkeytyy päälle vain, jos yhdistää juotoskohdan R16 umpeen. Minulla se ei ole käytössä. GLM:n sisäinen päätevastus lähettävässä päässä riittää, ja kaikki toimii ongelmitta myös kymmenen kaiuttimen järjestelmässä. Suuremmissa järjestelmissä päätevastus voi olla tarpeen.

Pico ei ole pakko kytkeä väylän viimeiseksi laitteeksi. Jos kuuntelija halutaan väylän keskelle, tarvitaan toinen RJ-45-liitin, jotta signaalit saadaan viedyiksi läpi seuraavalle laitteelle. Silloin molemmat liittimet kytketään rinnan samoihin napoihin.

Toimintatapa

Pico lukee siis vain yhtä nastaa, ja PIO tekee loput. Se näytteistää bitit 296000 baudin nopeudella, ottaa mukaan yhdeksännen databitin ja hyväksyy sanan vasta, kun molemmat stop-bitit ovat kohdallaan.

Työ on jaettu kahden ytimen kesken. Toinen ydin hoitaa vain vastaanoton: se tyhjentää PIO:n puskurin jatkuvasti, purkaa HDLC-escapet, kokoaa sanat kehyksiksi ja tallentaa ne aikaleiman ja järjestysnumeron kanssa rengaspuskuriin. Toinen ydin muotoilee kehykset tekstiriveiksi ja lähettää ne USB:llä tietokoneelle. Näin USB-liikenne ei hidasta vastaanottoa. Jos kehyksiä silti katoaa, firmware kertoo siitä # stat -riveillä, ja järjestysnumeroon tulee aukko. Status-rivi tulee 5 sekunnin välein, tai sekunnin välein, jos jokin laskuri on muuttunut.

Firmware

Pico 2:n capture-firmware on ladattavissa tästä. Paketissa on valmis UF2-tiedosto ja englanninkielinen README. Firmwaren asentaminen ei vaadi ohjelmointityökaluja: pidä Picon BOOTSEL-painiketta pohjassa, kun kytket USB-johdon tietokoneeseen, ja kopioi glm_capture.UF2 asemalle, joka ilmestyy näkyviin. Pico käynnistyy sen jälkeen itse.

Firmware toimii vain Pico 2:lla (RP2350), ei alkuperäisellä Pico 1:llä.

PuTTY

Kun rauta on kasassa ja firmware asennettu, Pico näkyy tietokoneella USB-sarjaporttina. Jokainen väylän kehys tulee siitä tekstirivinä, ja sen lukemiseen riittää PuTTY.

PuTTY:ssä valitaan yhteystyypiksi Serial ja kirjoitetaan sarjaportin nimeksi Picon COM-portti, jonka numeron näkee Windowsin Laitehallinnasta. Nopeudella ei ole oikeastaan merkitystä, koska data kulkee USB:n yli, mutta sen tulee olla väylän nopeutta suurempi, esimerkiksi 921600. Muut asetukset ovat 8 databittiä, 1 stop-bitti, ei pariteettia ja flow controlina None.

Ja jos ihmettelet miksi USB:ssä ei käytetä samaa 9N2 kuin GLM väylässä, niin Pico toimii välissä kääntäjänä. Merkit lähetetään USB:n kautta ASCII merkkeinä, eli tavallisena tekstinä, jotka ovat 8-bittisiä.

PuTTY:n asetukset. Flow controlin pitää olla None
Yhteystyypiksi Serial. Paina lopuksi Open.

Kannattaa myös nostaa scrollback suureksi, esimerkiksi 200000 riviin, ja laittaa lokitus päälle valinnalla All session output. Tiedostonimeen kannattaa lisätä päivämäärä ja kellonaika, esimerkiksi glm_&Y&M&D_&T.txt, jolloin jokaisesta tallennuksesta tulee oma tiedostonsa. Asetukset kannattaa lopuksi tallentaa omaksi sessiokseen.

Kun portti avautuu, ruudulle tulee ensin otsikkorivi, joka alkaa # glm-capture. Sen jälkeen tulevat kehykset, esimerkiksi tällaisina riveinä:

@12345678,89 101 009 05D 0E7 07E

Alussa on mikrosekuntiaikaleima ja kehyksen järjestysnumero. Perässä ovat kehyksen sanat kolmella heksanumerolla, ja 07E päättää kehyksen. Jos järjestysnumeroon tulee aukko, jokin kehys on kadonnut matkalla.

Väylän kehykset PuTTY:ssä

GLM-ohjelman vaikutus näkyvään liikenteeseen
Huomaa, että väylällä tapahtuu paljon vähemmän, jos GLM ei ole päällä. Ilman sitä näkyy ainoastaan hubin lähettämä äänenvoimakkuus. Kun tietokone ja Genelec GLM -sovellus ovat käynnissä, GLM kyselee kaiuttimilta tietoja ja kaiuttimet vastaavat, ja kaikki tämä näkyy väylällä.

Jos PuTTY:ssä näkyy vain harvakseltaan samoja rivejä, tarkista siis ensin, että GLM on käynnissä.

Käsin analysointi oli hidasta

PuTTY toimii hyvin, kun halutaan nähdä, että dataa tulee, ja tallentaa se tiedostoon. Varsinaiseen tutkimiseen se on silti kankea. Rivejä tulee tasaisena virtana, samat kyselyt ja vastaukset toistuvat kierros toisensa jälkeen, ja kiinnostavat kohdat hukkuvat niiden sekaan. Käsin analysointi oli hidasta, minkä myötä alkuperäinen projekti pelkän äänenvoimakkuuden näyttämisestä muuttui kokonaisvaltaisen kaappaussovelluksen ja tietorakenteiden salojen selvittämiseen. Mutta näistä lisää tulevissa kirjoituksissa.

Liitteet

Pico 2 – GLM Capture 2.1 firmware

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

This site uses Akismet to reduce spam. Learn how your comment data is processed.