USB och Arduino FAQ

Detta är en längre faktasida som uppkommit då vi ofta får in olika frågor om vad man får eller inte får göra när det gäller USB tillsammans med Arduinokompatibla produkter samt vad som är vad och hur skall man göra när man gör egna kort baserade på hårdvara/mjukvara från Arduino. Samt varför vi inte kan köpa in billiga Arduino Uno kloner från Kina och sälja dem i vår webbutik.

Arduino är ofta ett begrepp/namn som missuppfattas och “missbrukas” en hel del, så för att ta allt från början är Arduino ett företag och varumärke, det är inte kretskortet (såvida de inte kommer från Arduino) eller mikrokontrollern som sitter på kortet. Se det som ett koncept med allt från företaget, varunamnet och IDE (den mjukvara som man skriver koden i och laddar ner till sitt system).

När det gäller mikrokontrollern så är den inte från Arduino, den är från Atmel (numera Microchip då de köpt upp Atmel) och idag finns det även andra chipleverantörer såsom ST, Freescale med flera.

När det gäller USB biten så var faktiskt första kortet helt utan USB och nedladdning av mjukvara skedde via en vanlig RS232-port då många datorer hade detta som standard och USB inte var så utbrett än. Men ganska snabbt så sattes det dit en USB krets från FTDI (en FT232RL) och detta kort fick namnet Arduino Diecimila (10000). Just denna USB krets från FTDI och derivat från dem är fortfarande ganska vanliga på Arduinokompatibla kort. FT232RL är inget annat än en USB/UART (serieport) omvandlare. Även efterträdaren Arduino Duemilanove (2009) hade FT232RL. Dessa USB kretsar (vara sig de sitter på kortet eller är lösa kort) är inte programmerare, det är en USB/UART brygga.

Men korten därefter fick en helt annan USB-lösning, men det är här det börjar bli “struligt”. Dels tror många att det är en dedikerad USB-krets (såsom FT232RL) och kallar det för en USB krets, men det är en mikrokontroller med en USB enhet som kan om den programmeras fungera som en USB/UART brygga. Denna mikrokontroller heter Atmel ATmega8U2 (Arduino Uno R2) eller ATmega16U2 (Arduino Uno R3).

Sen till den stora biten som många tar fel på, det är att de tror de kan använda Arduino rätt av då Arduino bygger på öppen hårdvara/mjukvara. Kinesiska kloner gör ofta detta och det finns även större Svenska företag som inte respektera detta och göra rätt för sig (men det är inte vår uppgift att jaga dem). Eftersom det inte är en dedikerad USB krets såsom FT232RL från FTDI där man får använda deras USB VID/PID (Vendor ID och Product ID) utan att betala royalties så måste tillverkaren registrera sig hos USB IF och köpa sig ett VID. Detta har FTDI gjort och så även Arduino. Men man får inte använda Arduinos VID, FTDI eller någon annan VID i sin kommersiella produkt, det ingår inte i definitionen av öppen hårdvara/mjukvara, precis som du inte får kalla din produkt Arduino eller kopiera deras filer rätt av utan att ändra trycket på kretskortet, men med eget namn får du kalla den Arduinokompatibel.

Varför Arduino valde att byta från FTDI FT232RL till ATmega16U2 kan spekuleras i, men anledningen var nog dels kostnaden då FT232RL är en ganska dyr komponent även i stora kvantiteter jämfört med 16U2, dels ville nog Arduino själva ha ett eget USB VID/PID för deras produkter så att Kinaklonerna försvann (att göra rena kloner utan att lägga till något nytt var inte direkt tanken med öppen hårdvara/mjukvara), men det hjälpte inte, de kopierades ändå rätt av och med Arduinos USB VID. En annan anledning till att använda 16U2 var att man kunde som användare byta firmwaren i styrkretsen så att USB anslutningen inte vara blev en virtuell COM-port, utan den kunde bli en USB HID (Human Interface Device) så man kunde göra produkter som simulerade möss eller tangentbord etc.

De nyare korten från Arduino har inte en separat USB krets utan har en mikrokontroller med integrerad USB såsom ATmega32U4 (Leonardokompatibla kort) eller SAMD21G18 (Arduino M0/Zero kort). Här är man mer låst och måste köpa egen USB VID om man skall lansera produkter baserade på dessa mikrokontollers på marknaden. Dessa beter sig ofta med 2 olika VID/PID, dels använder bootloadern en och sedan firmwaren en annan för när man trycker på RESET eller startar om så tappar man USB anslutningen då inget program kör, det är inte som de dedikerade USB-kretsarna som fortfarande har kontakt med USB när mikrokontrollern startar om.

Det finns även Arduinokompatibla kort baserade på t.ex. ATtiny85 som inte ens har en dedikerad hårdvaru USB i mikrokontrollern, utan de emulerar USB i mjukvaran. Även här bör man använda sitt eget USB VID, men det gör man inte utan kör med de som kom på detta och de verkar acceptera detta. Dock har vi sett att Adafruit inte gör detta på deras Attiny85 produkter utan kör deras eget VID. Dessa lösningar är dock inte att föredra i kommersiella produkter då det finns problem med nya USB3 anslutningar.

Arduino är mycket tydliga på den biten om att inte använda deras USB VID om man frågar dem (och så även USB IF) i kommersiella produkter, men för eget bruk, prototyper eller/och i typ makerspaces etc. är det OK. Skulle man släppa en kommersiell produkt på marknaden med någon annans USB VID, så får man förr eller senare ett mindre trevligt brev från deras advokater. Det hände t.ex. när Arduino själva splittrades och Arduino.ORG bildades, de tvingades till slut ha eget USB VID (se lista längre ner på sidan).

Det finns även många Kickstarter-projekt som kör med Arduinos VID/PID och jag tror Arduino är lite flexibla med detta just i det skedet, men om det blir en mer kommersiell produkt efter detta så får man även där ett otrevligt brev så småningom.

Så skall man sälja Arduinokompatibla kort finns det 2 vägar att gå:

  • Köpa egen USB VID från USB IF och fixa egna drivrutiner
  • Använda dedikerade USB-kretsar med färdiga drivrutiner

Det är därför vi inte kommer ta in och sälja Arduinokloner som använder Arduinos VID med en 16U2, men vi kan däremot sälja produkter med 16U2 som har egna VID eller använder dedikerade USB kretsar såsom FT232RL, CP2104 eller CH340. När det gäller produkter som använder Mega32U4 eller SAMD21 där det finns en lösning med extern USB krets så måste vi hålla oss till de seriösa företagen som har eget USB VID.

Det är klart att man vill komma billigt och bekvämt undan så “lånar” man Arduinos VID eftersom det kostar $5000US för att registrera sitt eget USB VID utan att vara medlem, skall man dessutom vara medlem är det dyrare (och få använda USB logon). Det krävs även avgifter för att certifiera USB drivrutinen m.m. Sedan några år får man inte heller köpa in ett USB VID och sälja PID till andra företag, då får man USB IF på sig och blir av med sitt VID dessutom.

Det krävs således att man säljer en hel del system för att komma ner i kostnaden per kort, mer om kostnaden hos USB IF kan ni läsa här. Gör du endast några kort för hobby (eget bruk) och inte skall sälja systemen så kan du i godan ro använda Arduino VID. Därför är Kinesiska kloner billiga och de som betalar för sig har kostnader för det och högre styckepris.

Alla större seriösa företag (som inte bara kopierar rätt av och säljer en billig klon där de bara bytt namn på kortet, om de ens gör det) såsom de vi representerar (Adafruit, Pololu och SparkFun) har egen USB VID och därmed gör rätt för sig. Dock som sagt inte Kinakloner.

Så, vi kan sälja produkter från dessa seriösa tillverkare utan att riskera något, vi kan även importera Kinakloner som använder dedikerade USB-kretsar där det inte finns royaltyavgifter etc. såsom denna.

Idag finns det 3 större/populära leverantörer av USB kretsar som är vanliga att hitta på Arduinokompatibla kort, de är från FTDI (FT232 derivat) eller SiLabs (CP2104 med flera) eller de extremt billiga USB kretsarna från ett Kinesiskt företag som heter CH340.

Vissa tillverkare av mikrokontrollers tillåter även att man använder deras VID vid mindre serier (ofta under 10,000 enheter) och det är bäst att man kontrollerar sådant med tillverkaren innan man använder deras VID för att slippa få otrevliga brev från deras advokater. Ibland kan det krävas att man får ett tillstånd av dem.

Här är en lista av vanliga USB VID (hexadecimalt) från ett antal företag:

2341, Arduino
2394, Adafruit
1FFB, Pololu
1B4F, SparkFun
15BA, Olimex

0403, FTDI
10C4, SiLabs (Silicon Labs)
1A86, Kina CH340

03EB, Atmel
04D8, Microchip

2A03, Arduino.ORG (idag bytt namn till “What’s Next”)

Ett sista alternativ är att man säljer korten utan bootloader/firmware och köparen lägger in via en ISP (In System Programmer), JTAG (Joint Test Action Group) interface eller SWD (Serial Wire Debug) debugger/programmerare. Detta alternativ friskriver säljaren helt men det innebär även att köparen måste införskaffa en programmerare så de kan få ner bootloadern för att senare programmera via USB. Stöd för att programmera bootloadern finns i Arduino IDE via vissa ISP och SWD.

Vill man kolla vilken USB VID ens produkt använder så finns det olika program på marknaden, vi kör med NirSoft USBDeview, där kan man även utläsa massa annan matnyttig information.