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 produkter kompatibla med Arduino® 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 kloner från Kina baserade på 16U2 USB som använder Arduino ® VID/PID 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 dessutom ett registrerat varumärke. Det är inte ett kretskort (om inte kretskortet kommer från tillverkaren Arduino®) eller mikrokontrollern som sitter på kortet. Se det som ett varuskyddat namn 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 Microchip (tidigare Atmel innan Microchip köpte upp dem) och idag finns det även andra leverantörer av microkontrollers såsom ST, NXP, Freescale, Espressif med flera.
När det gäller USB delen så var faktiskt första kortet helt utan USB och nedladdning av mjukvara skedde via en vanlig RS232-port (via en standard DSUB9) då många datorer hade detta som standard innan USB var så vanligt förekommande. Men ganska snabbt så sattes det dit en USB krets från FTDI (en FT232RL) och detta kort fick namnet Arduino® Diecimila (som betyder 10000 på italienska). Just denna USB krets från FTDI och derivat från dem är fortfarande ganska vanliga på kompatibla kort, bl.a. SparkFun använder dem.
FT232RL är inget annat än en USB/UART (serieport) omvandlare. Även efterträdaren Arduino® Duemilanove (2009 på italienska) hade FT232RL. Dessa USB kretsar (vara sig de sitter på kortet eller är lösa kort) är inte programmerare som många kallar dem, det är en USB/UART brygga.
Men korten därefter fick en helt annan lösning med USB, men det är här det börjar bli “struligt”. Dels tror många att det fortfarande är en dedikerad USB-krets (såsom FT232RL) och kallar det för en USB krets, men det är egentligen en microkontroller med en USB enhet i sig som kan om den programmeras i microkontrollern fungera som en USB/UART brygga. Denna microkontroller heter ATMega8U2 (fanns på Arduino® Uno revision 2) eller ATmega16U2 (finns numera på Arduino® Uno revision 3).
Sen till den stora biten som många tar fel på, det är att de tror de kan använda och kopiera 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 utan Adruino® själva). 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 Arduino® VID och PID, 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 komponenttrycket på kretskortet, men med eget namn får du kalla den kompatibel med Arduino®.
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 Arduino® 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® och de som gör kompatibla kort har inte en separat USB krets utan har en mikrokontroller med integrerad USB såsom ATmega32U4 eller SAMD21G18. Här är man mer låst och måste köpa egen USB VID (som Adafruit, Pololu & SparkFun har) om man skall lansera produkter baserade på dessa microkontollers 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. Man kan i vissa fall få använda tillverkarens (i detta fall Atmel/Microchip) VID/PID i mindre serier, kolla vad som gäller med leverantören av microkontroller. Vissa behöver inte ett VID och drivrutiner heller såsom masslagrningsenheter och HID.
Det finns även 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 och Adafruit utvecklar inte nya produkter med denna teknik längre utan satsar på de billigare SAMD21 Cortex M0+ med inbyggd USB.
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 Arduino® 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 kompatibla 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 kloner som använder Arduino® 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 Arduino® 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å kompatibla 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/användaren lägger in via en ISP (In System Programmer), JTAG (Joint Test Action Group) interface eller SWD (Serial Wire Debug) debugger/programmerare. Med detta alternativ friskriver säljaren helt men det innebär även att köparen/användaren 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.
Utvecklingskort som använder detta på ett rätt sätt hittar du här i vår webbutik, det är produkter från SparkFun, Pololu och Adafruit. Samt de originalkort som kommer från Arduino® hittar du här.