Rozwijam niszowy produkt, który będzie produkowany przy dość niskim nakładzie (w setkach). Korzystam z Atmega uC, a jednym z wymagań jest możliwość flashowania przez użytkownika. Moim planem jest użycie bootloadera Arduino z układem USB-to-UART (leniwy, wiem, ale na tym tomie jest to prawdopodobnie najlepsza opcja).
Istnieje wiele możliwości wyboru. Moja prototypowa płytka korzysta obecnie z FTDI FT232RL, ale jest to zbyt kosztowne do produkcji, ponieważ cena całej płyty wynosi około 20 USD.
Rozważane przeze mnie układy scalone to:
- CH340G
- Najtańsza opcja, ale jaki jest status podpisanych sterowników dla OSX? Nie mogę ustalić, czy będzie to całkowicie plug and play. Czy ktoś wie, jaki to ma status?
- CP2102
- Solidny, bez obaw o podpisanych kierowców itp. Ale jest droższy.
- MCP2200
- Również solidny, nie martwi się o podpisane sterowniki. Jak wybrać tę opcję w porównaniu do CP2102? Są prawie w tej samej cenie.
Czy są jakieś inne „gotchas” z powyższymi opcjami poza podpisanymi sterownikami? Nie chcę zmuszać użytkownika do instalowania niepodpisanych sterowników / dodawania potencjalnie bolesnego procesu do procedury ponownego flashowania, ale tak naprawdę nie chcę dodawać 2 USD do kosztu BOM tylko ze względu na możliwość flashowania przez użytkownika.
Przydatne byłyby wszelkie ogólne wskazówki / porady. Dzięki.
Odpowiedzi:
Najprostszą opcją, którą polecam tutaj, byłoby użycie mikrokontrolera, który natywnie obsługuje USB i może być programowany za pomocą bootloadera USB DFU (Device Firmware Update). Jednym z przykładów takiego mikrokontrolera jest ATmega32U4, jak widać na Arduino Leonardo; innym jest ST STM32F103. Nawet jeśli te mikrokontrolery są nieco droższe niż te, których byś użył w innym przypadku, wzrost kosztów jest prawdopodobnie mniejszy niż koszt dyskretnego interfejsu USB UART. Użycie pojedynczej części zmniejszy również całkowity rozmiar i zużycie energii przez urządzenie.
źródło
Dostępny jest sterownik Apple dla CH340, zawierający najnowsze wersje MacOS. „AppleUSBCHCOM”.
źródło
Zasadniczo, jeśli dajesz swoim klientom możliwość flashowania twojego urządzenia, nie chcesz, żeby je zamrozili.
Dlatego głównym priorytetem jest niezawodne i bezpieczne połączenie z urządzeniem hosta. Z mojego doświadczenia wynika, że wszystkie chipy działają raczej dobrze w warunkach miejskich i laboratoryjnych, które, jak zakładam, są celem.
Weź również pod uwagę czas potrzebny do poprawnego działania komponentu - twoja produkcja jest w niskich setkach i dodajesz 2 $ do każdego. Czy ta „strata” jest warta więcej niż twój (lub deweloper) czas? Dobrze udokumentowany układ może być lepszym wyborem, nawet jeśli kosztuje więcej.
CH340
Tak, to naprawdę zły pomysł, przynajmniej jeśli chcesz Plug-And-Play. W przypadku systemu Windows 8.1 musiałem ręcznie zainstalować sterownik (
CH340SER.exe
), który musiałem pobrać ze strony internetowej (chińskiego) producenta, która (w tym czasie) nie miała tłumaczenia na angielski.Był on hostowany w Chinach, co może być problemem dla osób dbających o bezpieczeństwo i tych, które są związane zasadami organizacyjnymi i / lub politycznymi. Zostało również przewyższone jako wynik wyszukiwania przez wiele podejrzanych „bezpłatnych” stron pobierania sterowników.
Gdyby to był jakiś poważny sprzęt (w przeciwieństwie do „po prostu” Arduino), uniósłbym brwi do sufitu. Ręczna instalacja może być również bardzo irytująca, jeśli Twoi klienci nie mają dedykowanego sprzętu do flashowania.
W przeciwnym razie układ ten działał zgodnie z oczekiwaniami.
CP2102
Niewiele do powiedzenia, działało po wyjęciu z pudełka i nie powodowało żadnych problemów. Byłby prawdopodobnie moim wyborem dla przeciętnego projektu.
FTDI
Mam ten na osobnej karcie konwertera USB-Serial i działa dobrze. Jak pisałeś, jest raczej drogi, ale uważam, że może być lepszym wyborem w trudnych warunkach (na przykład skorodowane kontakty na złączach, również EMI). Może dać ci ciepłe uczucie rozmycia, ponieważ wspierasz oryginalnych programistów.
Inne pomysły
ISP
Zgodnie z odpowiedzią @Chetan Bhargava, opcją byłoby posiadanie złącza SPI, a następnie użycie samodzielnego konwertera szeregowego USB.
Wymaga to również zapewnienia niezawodnego i bezpiecznego w użyciu złącza, do którego ISP może się podłączyć. Oczywiście możesz taniej tutaj z nagłówkami pinów, ale jeśli chcesz to zrobić dobrze (i / lub nie ufać swoim klientom wystarczająco ), to złącze może być droższe niż dodatkowy układ i standardowe złącze USB. Połączenia szeregowe są wściekle trudne do debugowania, jeśli nie działają, w przeciwieństwie do USB, w którym klient przynajmniej zostanie powiadomiony, że urządzenie USB nie działa.
Jeśli dołączysz samodzielny konwerter z kartą, będziesz musiał zapłacić również cenę za kartę konwertera. Zakładam, że nie byłoby to tańsze niż zintegrowanie układu. Może to działać, jeśli każdy klient jest właścicielem wielu płyt, więc konwerter może zostać ponownie użyty, lub jeśli możesz po prostu przerzucić koszty pozyskania programisty po stronie klienta.
Jeśli ta opcja jest możliwa, w tym momencie istnieje także własna AVRISP firmy Atmel, który jest dobrym wyborem zamiast zwykłego złącza USB na szeregowy, choć nieco przestarzały. Myślę, że ogranicza się to do około 100 lub 200 kb / s, gdzie nowoczesne konwertery USB-Szeregowe wchodzą w zakres megabitowy. Ale jest bardzo odporny na (niewłaściwe) użycie.
Inną dobrą opcją może być złącze TC2030. Wymaga tylko padów na płytce drukowanej do pracy, ale wymaga pewnej wiedzy (musisz trzymać ją na miejscu, aż do zakończenia programowania).
Interfejsy komunikacyjne
Współczesne mikrokontrolery są również wyposażone w szereg innych interfejsów komunikacyjnych (Ethernet, WiFi, Bluetooth) i zwykle można je flashować za ich pomocą. Przykładem może być ESP32, który kosztuje około 6 USD i jest SoC ze wszystkimi komponentami niezbędnymi do połączenia Wi-Fi. Jest także kompatybilny z Arduino (możesz nawet użyć IDE) i ma bardzo dokładny zestaw przykładów, w tym bootloader WiFi OTA. Potrzebujesz tylko ISP do początkowego wdrożenia bootloadera.
Jeśli - jak to brzmi w twoim pytaniu - twój projekt jest w większości zakończony, prawdopodobnie nie jest to już opcja.
źródło
Aby twój produkt był programowalny w terenie / kabel flash wymaga użycia wspólnego złącza wyjściowego. Pinout Arduino jest dość powszechny. nie ma potrzeby osadzania konwertera USB na szeregowy, jeśli aktualizacje nie są cotygodniowe. W przypadku konfiguracji w terenie zwiększyłbym koszt sprzętu do programowania w terenie, a nie możliwości programowania w terenie
Nie musisz osadzać konwertera szeregowego, jeśli chcesz rzadziej flashować.
Niektóre popularne (i tanie) konwertery USB na szeregowe są oparte na następujących zestawach układów.
FTDI - sterowniki Windows i Linux, ale sterowniki mogą
zepsuć kabel - unikaj CH340 - sterowniki Windows i Linux
PL2303 - sterownik Windows i Linux
Sterowniki są łatwo dostępne dla platform Windows i Linux. Nie mogę powiedzieć wiele o jabłku, ponieważ nie stać mnie na laptopa.
Wolę zrezygnować z USB-Serial poza moim projektem, jeśli prawdopodobieństwo programowania w terenie wynosi <50%.
źródło