Designtips:

UART: En av mange fungerende PCB-implementasjoner.

Enkel debugging med UART over USB – og et lite utlegg for ditt neste kretskort

Embedded-utviklere trenger å se hva som skjer i sanntid – mens koden kjører. Dette må påvirke eksekveringen så lite som mulig.

Denne artikkelen viser en enkel USB-basert løsning og lenker til designfiler du kan gjenbruke. Jeg har til nå tatt opp 5 designprosjekter med den, helt smertefritt. Kretsen bruker en kompakt USB micro-B kontakt og en liten IC for å oversette mellom UART og USB. Det er mye mer fleksibelt å ha dette på prototypen enn å bruke en ustandard USB-kabel som oversetter fra TTL-nivåer.

Hvorfor?

Hvorfor akkurat UART? Som embedded-programmerer og kretsdesigner liker jeg å lire av meg ting som «printf() er toppen av dekadanse». I min verden er det ofte sant, for både budsjetter, minne og CPU-hastighet er så begrenset at det hverken er rom til å preprosessere eller tid til å eksekvere tekst. Foretrukket metode er derfor å bruke minimale ressurser til å skrive ut kun én og én bokstav.

Raskt nok

En prosessors serieport er ofte dobbeltbuffret. Det betyr at du kan skrive til porten samtidig med at forrige bokstav fortsatt klokkes ut, uten at det koster særlig mye tid. Det er bare hvis forrige-forrige bokstav fortsatt sendes at kode-eksekveringen bremses. Med en Baudrate på 115200 kan man teoretisk sende ca. 10.000 jevnt fordelte bokstaver i sekundet. Det vil fortelle mye å se at en bokstav er med (eller ikke) i et terminalvindu. Selv bruker jeg C-funksjoner som putc() og putnibble(). Sistnevnte skriver meget raskt ut et enkelt hex-tall.

Skjemategning

Sentrale komponenter

Nå om dagen setter jeg FTDI FT234XD på alt av printkort. Det er veldig praktisk at den får strøm fra USB-kabelen og kan levere opptil 50mV på 3.3V. En debug-port vil sjelden være i permanent bruk, og neppe trenge å bli sertifisert som den del av produktet. Derfor har jeg utelatt signaltrafo på datalinjene. Men TVS-dioder er alltid med. WE 824015 er tilgjengelig og enkel å ha med å gjøre.

To overlevninger fra alskens USB-design er også med, seriemotstander på USB-linjene og et power-filter med to 0603-feritter. Du må gjerne bruke 0Ω motstander eller kortslutte dem i utlegget. I tidligere design har disse hatt oppgaver rundt signalkryssing, ESD og EMI. Derfor er de fortsatt med i mitt bibliotek.

BOM-liste

Kompakt og sterkt

En stående USB-micro-kontakt gjør designet kompakt. Hullmontasaje gir god mekanisk styrke. PCB-symbolet har i utgangspunktet plettert fres som jeg har endret til pletterte hull. Det er enklere å spesifisere til produsent, men gjør pluggen litt ustabil før den er loddet fast. Jeg bruker WE 614105150621. Det er en micro-AB-plugg som tar alt av kabler. Purister vil kanskje foretrekke micro-B på en USB device. Da passer WE 614105150721 på samme PCB-symbol.

Stående USB-plugg er for debug med lokket av. Hvis du må lede signalet ut av kabinettet, anbefaler jeg heller CGT USB4085-GF-A. Det er en hullmontert USB-C-plugg med kun USB 2.0-pinner. Den er enkel å jobbe med, ser bra ut og sitter godt fast.

Kortet

Utlegget er på tolags FR4 med 0603-komponenter som er enkle å håndlodde. To innerlag er tatt med for å vise hvor det bør være åpninger i interne plan. Designet fungerer helt fint på 1.6mm tolags-kort. Med små avstander og kompakt montasje har jeg ikke fokusert på impedansmatching. I min erfaring er også USB 2.0 ekstremt motstandsdyktig og vil fungere på omtrent alt som kan lede strøm.

Kortutlegg.

Kryssemotstander

Mot prosessoren står det motstander som lar deg krysse TX og RX ved behov. Man kan analysere signalretning i detalj, men fortsatt gå på en smell. Det har skjedd meg mer enn én gang, så jeg tar alltid disse motstandene med. RTX og CTS har jeg derimot sjelden behov for. Krysse-motstandene gjør det dessuten enklere å detektere kryssing og tilpasse stigetider og ringing ved lange signalbaner.

Ulemper?

Kretsen har egentlig bare to ulemper. Den ene er at tilkoblet USB-kabel setter FT234XD sin TX-linje til konstant ‘1’, 3.3V. Hvis prosessoren ikke er på, risikerer du å gi den drivspenning via dens RX-linje og interne beskyttelsesdioder. Avhengig av behov kan man forhindre det med større seriemotstand (inntil TX-linjens signalintegritet svekkes), driver-krets for forskjellige spenningsnivåer eller galvanisk skille.

Den andre ulempen er at FT234XD er ganske liten. Selv har jeg håndloddet den flere ganger med varmluft og flussmiddel. Med mikroskop og stødig hånd burde det gå fint.

Klar til start

Så kjør på med debugging og bring-up av ditt neste embedded-design! Og bruk gjerne denne enkle lille kretsen så mye som du vil. Den gjør det lett å putte inn en standard USB-kabel og se hva som skjer inne i koden din.

Komplette designfiler: http://www.henryaudio.com/uart.zip

Om forfatteren:

Børge Strand-Bergesen har jobbet som elektronikkingeniør og produktsjef siden 1999. Han er aktiv i SI-Forum, daglig leder for konsulentfellesskapet Elgg og grunnlegger av Henry Audio. Kretsene hans er vanligvis mye mer komplekse enn dette eksemplet. Han har ingen tilknytning til CGT, WE eller FTDI.

Powered by Labrador CMS