Op het eerste gezicht lijkt de MAX78000 van Maxim Integrated misschien wel een “normale” dual-core microcontrollerkaart, maar hij heeft eigenschappen die hem geschikt maken voor een ander gebied van embedded toepassingen: kunstmatige intelligentie (AI). Met AI bedoelen we in dit verband dat het systeem geschikt is om complexe patronen te herkennen in de input, zoals geluiden en beelden. En bovendien dat we er regelsystemen mee kunnen maken die op die patronen reageren. Zo is er voor deze evaluatiekit, onder andere, een applicatie om gesproken commando’s te herkennen. En die demo is uit te breiden met, bijvoorbeeld, het schakelen van digitale uitgangen op basis van de herkende commando’s.

Mijn Elektor-collega Clemens Valens heeft een eerste kennismaking met het MAX78000FTHR-evaluatieboard gepubliceerd. In dit artikel wil ik ingaan op de hardware van het board. In een volgend artikel zal Mathias Claußen u meenemen in de eerste stappen van het ontwikkelen van software voor deze kaart.

Snel ontwikkelen met de MAX78000FTHR

The following text from Maxim Integrated’s documentation describes the piece of electronics that landed on our desks a couple of weeks ago:

De MAX78000FTHR is een rapid development platform, waarmee ontwikkelaars snel ultra-low power, artificial intelligence (AI) oplossingen kunnen implementeren met de MAX78000 Arm® Cortex®-M4F processor met een geïntegreerde Convolutional Neural Network-accelerator. De kaart bevat ook de MAX20303 PMIC voor accu- en energiebeheer. De afmetingen zijn 0,9” x 2,6” (ongeveer 25 x 70 mm) en er is plaats voor twee rijen pinheaders, zodat hij compatibel is met Adafruit Feather Wing-uitbreidingskaarten. De kaart bevat verschillende periferie-elementen, zoals een CMOS VGA-beeldsensor, een digitale microfoon, een low-power stereo audio-CODEC, 1 MB QSPI-SRAM, een microSD-connector, RGB-LED’s en drukknoppen. De MAX78000FTHR biedt een flexibel platform met geoptimaliseerd energieverbruik voor snelle proof-of-concepts en vroege softwareontwikkeling om de doorlooptijd te verkorten.

Voor kunstmatige intelligentie is extreem veel rekenkracht nodig, maar de MAX78000 kan neurale netwerken doorrekenen bij een ultra laag energieverbruik: de in de hardware geïntegreerde Convolutioneel Neuraal Netwerk (CNN)-versneller kan energiezuinig AI-inferenties (het gebruik van vooraf getrainde modellen) uitvoeren. Dat brengt AI dichtbij (of zelfs binnen) de wereld van het IoT.

In dit artikel werpen we een blik op de hardware en de functionaliteit van de MAX78000 en de periferie van het Feather Board. In figuur 1 ziet u een vereenvoudigd blokschema van de hardware op de MAX78000FTHR-kaart die we hier meer in detail willen beschrijven.

Figuur 1: Blokschema van de MAX78000FTHR (bron: MAX78000 FTHR Application Platform). 

De MAX78000-microcontroller

Deze controller is natuurlijk het hart en het belangrijkste onderdeel van dit evaluatieboard. We willen hier alleen de belangrijkste kenmerken van deze microcontroller in het kort bespreken. Voor meer informatie verwijzen we naar het datasheet dat u kunt downloaden en naar de MAX78000 User Guide die, op dit moment, alleen te vinden is op GitHub, maar binnenkort hoogstwaarschijnlijk ook beschikbaar komt op de website van Maxim Integrated. In figuur 2 ziet u de structuur van de hardwareblokken in deze microcontroller.

Figuur 2: Blokschema van de MAX78000-microcontroller (bron MAX78000-datasheet).

De MAX78000 is een dual-core chip, met een Arm Cortex-M4-processor met FPU met een klokfrequentie tot 100 MHz en een 60 MHz RISC-V-coprocessor.
De eerste processor is verantwoordelijk voor de belangrijkste taken in de MAX78000, terwijl de RISC-V-coprocessor is toegevoegd voor ondersteunende taken, zoals DMA-data-transfer en achtergrondtaken, zoals GPIO-besturing. De processors hebben grotendeels dezelfde toegang tot de periferie en kunnen voor elk soort taak worden geprogrammeerd. Het interne geheugen voor algemeen gebruik in de MAX78000 bestaat van 512 kB Flash, 128 kB SRAM, 16 kB cache en een Boot-ROM.

Het Convolutional Neural Network (CNN)-blok rechtsboven in het blokschema is het belangrijkste onderdeel voor de kunstmatige intelligentie. Een bespreking van kunstmatige intelligentie en informatie over hoe dit CNN-blok werkt, vallen buiten de scoop van dit artikel, meer informatie over het CNN is te vinden in het datasheet en in de User Guide. Het CNN-blok bevat gereserveerd geheugen voor de opslag van de weegfactoren van het neurale netwerk en voor de opslag en verwerking van de inputdata. Deze geheugenruimte is onafhankelijk van het normale werkgeheugen en is toegankelijk voor de microcontroller.

Het interne klok- en vermogensbeheer is te gebruiken om de rekenkracht en het vermogensverbruik van de MAX78000 aan te passen aan de behoefte. De MAX78000 heeft maximaal 52 GPIO-pennen, die worden gedeeld met een indrukwekkend aantal interfaces. Natuurlijk zijn veel van die pennen en interfaces op de MAX78000FHTR-kaart bezet door de aanwezige hardware en periferie. Zelfs pennen die zijn uitgevoerd naar de connectors aan de zijkanten van het Feather Board worden in sommige gevallen gedeeld met die hardware. Controleer dus altijd of externe elektronica die u wilt aansluiten daarmee niet in conflict komt! In figuur 3 is te zien, welke I/O-lijnen worden gebruikt voor de periferie op de kaart. De uitgangsspanning van elke GPIO-pen van de MAX78000 is via software te configureren als 1,8 V of 3,3 V. (In figuur 3 ziet u de periferie op het Feather-board en de aansluitingen aan de MAX78000 en PMIC. Bron: MAX78000 FTHR Application Platform​).

Figuur 3a: Bovenzijde.
Figuur 3b: Onderzijde.


Qua interfaces beschikt de MAX78000 over seriële debugging (SWD), één I2S (master/slave), drie snelle I2C-masters, één 4-draads UART, twee 2-draads UARTS, één 2-draads Low Power UART (LPUART), twee SPI’s (master/slave), één 1-Wire-master en een 12-bits parallelle camera-interface (PCIF). Verder zijn er acht 10-bit Sigma-Delta ADC-kanalen en drie pulstrein-engines. En tenslotte zijn er een real time-klok, twee watchdog-timers, vier 32-bits timers en twee 32-bits low power-timers.

MAX20303 Wearable Power Management IC met energiemeter

Dit power management-IC bevat spanningsregelaars, een acculader en een energiemeter voor het besturen en bewaken van een (optionele) externe LiIon-accu aan de JST-connector J9. Het is ontworpen voor wearable toepassingen met een ultra laag vermogen en is configureerbaar via een I2C interface. Op deze kaart is die aangesloten op P0_17 (SDA) en P0_16 (SCL) van de MAX78000. Meer informatie over dit PMIC is te vinden in het datasheet.

De MAX20303 regelt de voedingsspanningen voor het Feather Board en schakelt automatisch om naar de externe accu (als die aanwezig is) wanneer de USB-spanning wegvalt. De accu wordt opgeladen als het Feather Board wordt gevoed via de USB-connector CN1 en het systeem minder stroom nodig heeft dan de maximaal toegestane ingangsstroom. In dat geval wordt de accu geladen uit het overschot aan beschikbaar vermogen aan de ingang, met een laadstroom van maximaal 51 mA. Als de processor meer stroom nodig heeft dan de USB kan leveren, dan wordt de externe LiPo-accu (indien beschikbaar) bijgeschakeld voor extra vermogen.

Eén output van de MAX20303 (L1OUT) kan worden geconfigureerd om de voeding van de microfoon te schakelen, en een andere output (MCP0) kan de voeding van de SD-kaarthouder schakelen. Thermistor RT1 is ook verbonden met de MAX20303, waarschijnlijk om de temperatuur van de batterij tijdens het laadproces te bewaken (hoewel dat niet vermeld wordt in het datasheet van de MAX78000FTHR). Het zou dan nodig zijn om de LiPo-accu aan de onderkant van de print te bevestigen. RT1 zit dicht bij de driehoekige markering die pen 1 van de SD-kaarthouder aangeeft.

Debug- en programmeerinterface

Een MAX32625-microcontroller (U2) is geprogrammeerd met DAPLink-firmware, waarmee de MAX78000 ARM Cortex-M4 via USB kan worden geprogrammeerd en gedebugd. U2 zorgt ook voor een verbinding tussen één van de UART’s van de MAX78000 en de USB-poort, zodat u op uw PC een terminalprogramma kunt draaien om seriële data uit te wisselen met het Feather Board. Hij maakt het ook mogelijk om de MAX78000 te benaderen als een USB-opslagapparaat, zodat u hem kunt programmeren door gewoon een binair bestand naar de kaart te verslepen.

J1 is een gewone 10-polige JTAG-connector om de RISC-V-kern van de MAX78000 te programmeren en te debuggen. Pal daarnaast is op de print ruimte voor J2, een 10-polige SWD-aansluiting (die niet is geplaatst) voor de ARM-core van de MAX78000. Aan de onderkant van de print zit J3. Dat is een 10-polige connector voor de SWD-interface van U2, de microcontroller voor de DAPLink interface.

Breadboard-compatibele headers

Met twee SIL-connectors langs de randen van de kaart (J4 en J8) kan de MAX78000FTHR op een standaard breadboard worden gestoken en de afmetingen van de print met deze twee connectors zijn ook compatibel met Adafruit Feather Wing-uitbreidingskaarten. Figuur 4 laat zien welke signalen er met de pennen van deze connectors zijn verbonden. Houd er wel rekening mee dat sommige van die signalen worden gedeeld met de periferie op de kaart!

Figuur 4: Aansluitingen op de Feather Wing-connectors (bron: MAX78000 FTHR Application Platform).

De meeste I/O-pennen op deze connectors worden rechtstreeks aangestuurd door de MAX78000, maar sommige zijn verbonden met de MAX20303-PMIC, die dus ook dient als I/O-expander. Hoewel er alles aan is gedaan om Feather Wing-compatibel te zijn, blijft dat een niet-officiële standaard. Controleer altijd goed of er niets fout kan gaan als u Feather Wing-kaarten gaat aansluiten.

De niveaus van de I2C-lijnen op de pennen 11 en 12 van J4 worden door de level-shifter U6 (een MAX14595) van 1,8 V naar 3,3 V gebracht. Als u dat niet wilt, kunt terugschakelen naar 1,8 V door de nul-ohm-weerstand van positie R15 naar R20 te verplaatsen op de onderkant van de print (dicht bij pen 12 van connector J4).

MicroSD-kaarthouder

J6 aan de onderkant van de print is een standaard microSD-kaarthouder. Deze is met MAX78000 verbonden via een SPI-interface. De voeding van de SD-kaart kan met output MCP0 van het MAX20303 Power Management IC en een MOSFET worden in- en uitgeschakeld. De SPI-interface wordt gedeeld met het QSPI-RAM-geheugen.




Hebt u een idee voor interessante AI-projecten met de MAX78000? Kijk dan naar de Maxim Integrated MAX78000 AI Design Contest (powered by Elektor).
 


RGB-LED’s

De MAX78000FTHR-kaart bevat drie RGB-LED’s. D1 is beschikbaar voor toepassingen van de gebruiker. De rode, groene en blauwe LED zijn respectievelijk verbonden met P2_0, P2_1 en P2_2 van de MAX78000. D2 is verbonden met de LEDx-outputs van de MAX20303 PMIC. Deze zijn met behulp van I2C commando’s ook te configureren als ladingsindicatoren voor de accu. De status-LED van de DAPLink-adapter (D3) wordt bestuurd door de programmeer/debug-interface en is niet door de gebruiker te besturen.

Drukknoppen

Twee van de vijf drukknoppen op de kaart zijn beschikbaar voor toepassingen van de gebruiker: SW1 en SW2 zijn respectievelijk verbonden met de pennen P0_2 en P1_7 van de MAX78000 (via de dubbele contactdenderonderdrukker U11, een MAX6817). SW3 is de aan/uit-drukknop, die het MAX78000FTHR-board uitschakelt als hij langer dan 12 seconden wordt ingedrukt. Deze knop is verbonden met pen PFN1 van het PMIC MAX20303. SW4 is de reset-knop van de MAX78000, en SW5 bestuurt de firmware-update met de DAPLink Debug and Programming Interface MCU (U2).

CMOS VGA Image Sensor

De VGA-sensor is bedoeld voor beeld- en patroonherkenningstoepassingen. De Omnivision VGA CameraCubeChipTM CMOS-sensor OVM7692 U1 is rechtstreeks gekoppeld met de MAX78000 via de Parallel Camera Interface (PCIF). Opmerking: Er kan nog een beschermfolie op de lens zitten, vergeet die niet te verwijderen voordat u de camera in gebruik neemt!

Audio

De beide 3,5mm-jack-connectors (J5 en J7) zijn bedoeld voor respectievelijk een stereo lijn in- en uitgangssignaal voor geluidsverwerking. De signalen worden door een MAX9867 low power stereo audio-CODEC geleid, die via I2C bestuurd wordt door de MAX78000. De digitale audiodata worden tussen CODEC en microcontroller overgedragen via de I2S-bus.

Deze I2S-bus wordt gedeeld met MK1, een digitale microfoon van het type SPH0645LM4H-B van Knowles Acoustics. Om conflicten met de CODEC op de I2S-bus te voorkomen, is de voeding van de microfoon via I2C te besturen door output L1OUT van het PMIC.

Extern SRAM-geheugen

Aan de onderkant van de print zit U2, een N01S830HAT22I van On Semiconductor, met 1 Mb extra QSPI-SRAM. De seriële interface van dit geheugen is verbonden met de pennen P0_5 t/m P0_10 van de MAX78000, enkele van die pennen worden gedeeld met de SD-interface.

Een krachtige oplossing

Maxim Integrated presenteert met dit MAX78000 Feather Board een platform voor batterijgevoede AI-toepassingen, dat klein is van afmetingen, maar groot is in rekenvermogen en periferie. De Adafruit Feather-compatibiliteit maakt het gemakkelijk om extra hardware aan te sluiten. Met een verkoopprijs van rond €25 biedt de MAX78000FTHR een ontwikkelplatform met veel goede periferie, dat ook nuttig kan zijn voor wie een krachtige microcontollerkaart nodig heeft en de AI-mogelijkheden niet eens gebruikt.

Natuurlijk werkt er bij een microcontrollerkaart niets zonder software. Daarom volgt binnenkort een artikel van Mathias Claußen dat u zal helpen bij het opzetten van de ontwikkelgereedschappen en het compileren van toepassingen. Voorlopig kunt u in ieder geval al gaan spelen met de voorgeprogrammeerde toepassing voor het herkennen van sleutelwoorden, die aantoont wat deze AI-kaart in zijn mars heeft!


Vertaling: Evelien Snel