Realtek Ameba Board (RTL8195AM)
Deze post begint op een avond dat mijn zoontje naar me toe komt met een defect poppetje van de WII-U game Lego Dimensions, namelijk de tovenaar. Aangezien Lego Dimensions werkt met NFC gegevensoverdracht lijkt het me leuk om dat eens wat verder te onderzoeken. Ik besluit hiervoor o.a. mijn Realtek Ameba aan te sluiten. Een board welke ik een tijdje terug op de kop getikt heb en welke een NFC tag zou kunnen emuleren. Eens kijken hoe ver we kunnen komen. In deze post het up & running krijgen van de Realtek Ameba.
Het Ameba board van Realtek is een “IoT” ofwel “Internet of Things” board welke voorzien is van een 32-bits RTL8195AM ARM Cortex M3 166MHz chip. Het board heeft 1MB ROM, 2MB SDRAM en 512KB SRAM (SRAM ofwel Static Random-Access Memory vertoont wel gegevensresten maar het is nog steeds tijdelijk in de conventionele betekenis dat gegevens uiteindelijk verloren gaan wanneer het geheugen niet van stroom wordt voorzien).
De Realtek Ameba is niet alleen maar een NFC apparaat. De Ameba kan worden aangestuurd via een Arduino en huisvest van zichzelf ook WiFi, USB (On-The-Go), SD-card controller, Hardware SSL engine en Ethernet (via de Arduino).
Daarnaast is de Realtek Ameba voorzien van 30 GPIO pinnen met o.a. de volgende interfaces:
- 2x SPI (master of slave mode)
- 3 UART waarvan 2 HS-UART en 1 log UART
- 4x I2C (master of slave mode)
- 2x I2S/PCM (master of slave mode)
- 4x PWM
- 2x ADC
- 1x DAC
De complete GPIO PIN layout van het Ameba Board is als volgt:
Alle verzamelde data kan worden geüpload via WiFi en worden gebruikt door applicaties op “smart devices” om de IoT-implementatie te realiseren.
Bij bovenstaande PIN layout moet opgemerkt worden dat zowel A0 als A1 verbonden zijn met ADC_CH1. De pinnen A0, A1, A2 en DAC zijn niet geschikt voor GPIO. Belangrijk is ook dat alle LED’s op het bord gebruikt worden door de CMSIS-DAP en niet programmeerbaar zijn door de gebruiker. Om LED’s te gebruiken voor testdoeleinden kunnen externe LED’s aangesloten worden.
Er zijn 3 knoppen op het Ameba board, de twee knoppen in de buurt van de USB-aansluitingen zijn verbonden met de DAP en de knop aan de zijkant is de resetknop. De buttons op het Ameba board zijn niet door de gebruiker te programmeren.
Omdat de Realtek Ameba zo veelzijdig is kun je met gemak verbinding maken met verschillende componenten. Denk aan schakelaars, sensoren, LED’s, switches, manometers, hygrometers, PM2.5 etc. De Realtek Ameba wordt gebruikt in o.a. solar systemen, quadcopters, automatisering van diverse industrieën. De mogelijkheden zijn eindeloos. Nu alleen het spul nog werkende krijgen 🙂
Beginnen met de Realtek Ameba
In deze post leg ik het beginproces uit met een nieuw RealTek Ameba board. We beginnen dus helemaal van scratch.
Voordat we beginnen met de Realtek Ameba is het verstandig om eerst bekend te worden met de onderdelen van het board. De belangrijkste onderdelen zijn:
Zoals je kunt zien zijn de Realtek Ameba en de Arduino Uno ongeveer even groot en komen de GPIO pinnen overeen (qua layout op het board):
Het aansluiten van de Ameba op je computer zodat je deze kunt beheren doe je door een micro USB kabel te verbinden met de DC input / Serial poort (dus niet in de 5V DC Input). Als de Ameba aangesloten is gaan er een aantal status ledjes branden (D1 of D2 & D3, D4 en D5:
De computer kan pas communiceren met de Ameba als de juiste driver geïnstalleerd is. Ameba gebruikt de standaard “Arm MBED CMSIS DAP” driver en is hier te downloaden. Nadat de driver is geïnstalleerd verschijnt de “mbed Serial Port” in je device manager met een COM poortnummer.
Hoewel alle stappen moeten functioneren op Windows 10 met een USB 3.0 poort lees ik geregeld dat dit niet ondersteund wordt en dat veel mensen hier problemen bij ervaren. Mocht je zelf problemen ervaren sluit de Ameba dan aan op een Windows7 (x32 of x64) PC en bij voorkeur op een USB 2.0 poort.
Nu de Ameba aangesloten is en een COM poort toegewezen heeft gekregen ben je in staat om te communiceren met je Ameba board. Nu kun je o.a.:
- Berichten lezen die verstuurd worden door het Board (bijvoorbeeld t.b.v. troubleshooting
- Berichten sturen naar het board om b.v. de microcontroller te programmeren
Om te communiceren met het Ameba board kun je b.v. een terminal applicatie zoals Putty gebruiken. De instellingen die je (voor de COM toewijzing) moet gebruiken zijn:
- 9600 baud
- Standaard seriële connectie, dus: 8-bits, 1 stop bit, no parity
Normaliter moet je onderstaande scherm zien wanneer je verbonden bent en de reset button indrukt:
Ik kreeg echter onderstaande meldingen:
Please Re-boot and try again, or re-burn the flash image.
Dit komt omdat we de DAP firmware eerst moeten upgraden gevolgd door een “ram_all” upgrade.
Laten we beginnen met het upgraden van de DAP firmware.
Om de firmware te updaten hou je de DAP update button ingedrukt terwijl je de DAP reset button indrukt waarna je DAP update button weer loslaat:
Vervolgens verschijnt er een CRP DISABLD disk in de Windows Explorer.
Op deze disk staat een firmware.bin bestand. Backup deze en verwijder hem. Download de nieuwste firmware via https://www.amebaiot.com/en/change-dap-firmware/ en plaats deze op de CRP DISABLD disk. Je hoeft het bestand niet te hernoemen, het board compiled het bestand zelf. Reboot de Ameba (door de kabel te verwijderen en terug in te pluggen) en de nieuwste firmware staat erop. Dit kun je controleren omdat er in de Windows Explorer een MBED disk bijkomt met een “mbed.htm” bestand waar de huidige versie in vermeld staat.
Na de update lijkt de verbinding met de Ameba een heel stuk stabieler en lijkt ook de melding “Unknown USB Device (Device Descriptor Request Failed” melding verleden tijd. De terminal geeft echter nog dezelfde melding.
Nu gaan we de “ram_all.bin” updaten. Om dit te doen moet je eerst het juiste ram_all.bin bestand downloaden. Deze is o.a. hier te downloaden. Je kunt zowel de ram_all.bin, DAP firmware en de MBed driver die ik gebruikt heb downloaden als complete package in dit bestand.
Als het bestand gedownload is verbind je de Ameba weer met je PC. Nu krijg je een nieuwe schijf genaamd: “MBED”.
Kopieer je ram_all.bin nu naar deze schijf. Dit duurt ongeveer 2 minuten. Mocht je de terminal aangesloten hebben gedurende dit proces dan ziet er dit ongeveer als volgt uit:
Nadat de ram_all geflashed is zal de Ameba normaal opstarten en het volgende venster tonen:
Nu het board succesvol opstart en beheerd kan worden kunnen we het board gaan programmeren. Dit kunnen we doen middels de terminal maar beter nog via een IDE tool. De Arduino IDE ondersteund ook externe (niet-Arduino) boards. Meestal wordt de Arduino IDE dus ook gebruikt om de Realtek Ameba te programmeren. Dit doe je als volgt:
Download de Arduino IDE software vanuit de volgende URL:
https://www.arduino.cc/en/Main/Software
Start de software en voeg de volgende regel toe aan “File” – “Preferences” bij de kop “Additional Boards Manager URLs”:
https://github.com/Ameba8195/Arduino/raw/master/release/package_realtek.com_ameba_index.json |
Reboot de Arduino IDE software en ga vervolgens naar “Tools” – “Board” – “Boards Manager” en selecteer daar de “Realtek Ameba Boards” software om te installeren.
Nu kunnen we in de Arduino IDE manager ook het “Ameba Arduino” board selecteren:
Programmeren Realtek Ameba
Om te testen of het board inderdaad naar behoren werkt gaan we zoals altijd de meest simpele test uitvoeren, namelijk het laten blinken van een LEDje.
Sluit het LED als volgt aan:
Vervolgens start je de Arduino IDE en zorg je ervoor dat je de juiste COM poort en het juiste board geselecteerd hebt. Daarna laad je uit “Bestand” – “Voorbeelden” – “01. Basics” het “Blink” schema.
Compile het script en upload hem naar de Ameba. Nadat je de Ameba gereset hebt zal je zien dat het lampje gaat knipperen.
Dus we hebben nu een werkend board waarmee we kunnen communiceren via de Arduino IDE. Mocht je de datasheet van de RealTek Ameba wilen downloaden om er zelf mee aan de slag te gaan dan kan dat hier.
Nu we de Ameba up-and-running hebben zullen we eens gaan spelen met de functies. In de volgende post zullen we de NFC module gaan gebruiken om te kijken hoe ver we met de Lego Dimensions Tag komen.