UART in PIC


IO0 lijn aan Gnd gelegd? (moet voor firmware download...)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Op 19 maart 2020 18:35:57 schreef Arco:
IO0 lijn aan Gnd gelegd? (moet voor firmware download...)

Er zit geen aparte IO0 pin op. Maar ik begreep dat dat wordt geregeld doordat je de knop 'boot' ingedrukt moet houden tijdens het flashen (is bij Arduino ook zo).

Het flashen lijkt gelukt, ik gebruikte de tool ESP32 download tool.

Maar er gebeurt evenwel nog niks met de AT commando's via Hterm of een AT Command tester. Er komt gewoon niks terug...
(Ik heb de module aangesloten via de USB op de PC).

Kan ik op een andere manier testen of de Flash goed is gegaan?

Als 'ie antwoord geeft is het gelukt...
Weet je zeker dat het AT firmware is die erin zit nu? ( https://www.espressif.com/sites/default/files/ap/ESP32-WROOM...V1.1.2.zip )

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ja deze had ik volgens mij ook ook gebruikt.
Ik zie dat er ook een factory.bin in zit. Is dat soms de default (terug naar begininstelling? Een soort 'Combined' .bin?)

Hoef ik dan gaan andere .bin's meer te downloaden (zoals bootloader.bin etc?)

Als ik deze neem moet er een adres worden opgegeven. Kan dat 0x1000 zijn?

Als ik het ding opnieuw flash, het daarna weer af-en aansluit en op EN druk, dan spuugt de module een heleboel spul uit:

ets Jun 8 2016 00:22:57<\r><\n><\r><\n>rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)<\r><\n>configsip: 0, SPIWP:0xee<\r><\n>clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00<\r><\n>mode:DIO, clock div:2<\r><\n>load:0x3fff0018,len:4<\r><\n>load:0x3fff001c,len:5564<\r><\n>load:0x40078000,len:0<\r><\n>load:0x40078000,len:13756<\r><\n>entry 0x40078fb4<\r><\n><27>[0;32mI (29) boot: ESP-IDF v3.0.3 2nd stage bootloader<27>[0m<\r><\n><27>[0;32mI (29) boot: compile time 08:53:32<27>[0m<\r><\n><27>[0;32mI (29) boot: Enabling RNG early entropy source...<27>[0m<\r><\n><27>[0;32mI (33) boot: SPI Speed : 40MHz<27>[0m<\r><\n><27>[0;32mI (37) boot: SPI Mode : DIO<27>[0m<\r><\n><27>[0;32mI (41) boot: SPI Flash Size : 4MB<27>[0m<\r><\n><27>[0;32mI (46) boot: Partition Table:<27>[0m<\r><\n><27>[0;32mI (49) boot: ## Label Usage Type ST Offset Length<27>[0m<\r><\n><27>[0;32mI (56) boot: 0 phy_init RF data 01 01 0000f000 00001000<27>[0m<\r><\n><27>[0;32mI (64) boot: 1 otadata OTA data 01 00 00010000 00002000<27>[0m<\r><\n><27>[0;32mI (71) boot: 2 nvs WiFi data 01 02 00012000 0000e000<27>[0m<\r><\n><27>[0;32mI (79) boot: 3 at_customize unknown 40 00 00020000 000e0000<27>[0m<\r><\n><27>[0;32mI (86) boot: 4 ota_0 OTA app 00 10 00100000 00180000<27>[0m<\r><\n><27>[0;32mI (94) boot: 5 ota_1 OTA app 00 11 00280000 00180000<27>[0m<\r><\n><27>[0;32mI (101) boot: End of partition table<27>[0m<\r><\n><27>[0;31mE (106) boot: ota data partition invalid and no factory, will try all partitions<27>[0m<\r><\n><27>[0;32mI (114) esp_image: segment 0: paddr=0x00100020 vaddr=0x3f400020 size=0x200f4 (131316) map<27>[0m<\r><\n><27>[0;32mI (169) esp_image: segment 1: paddr=0x0012011c vaddr=0x3ffc0000 size=0x02d6c ( 11628) load<27>[0m<\r><\n><27>[0;32mI (173) esp_image: segment 2: paddr=0x00122e90 vaddr=0x40080000 size=0x00400 ( 1024) load<27>[0m<\r><\n><27>[0;32mI (176) esp_image: segment 3: paddr=0x00123298 vaddr=0x40080400 size=0x0cd78 ( 52600) load<27>[0m<\r><\n><27>[0;32mI (206) esp_image: segment 4: paddr=0x00130018 vaddr=0x400d0018 size=0xdf390 (914320) map<27>[0m<\r><\n><27>[0;32mI (527) esp_image: segment 5: paddr=0x0020f3b0 vaddr=0x4008d178 size=0x01f14 ( 7956) load<27>[0m<\r><\n><27>[0;32mI (530) esp_image: segment 6: paddr=0x002112cc vaddr=0x400c0000 size=0x00064 ( 100) load<27>[0m<\r><\n><27>[0;32mI (542) boot: Loaded app from partition at offset 0x100000<27>[0m<\r><\n><27>[0;32mI (542) boot: Disabling RNG early entropy source...<27>[0m<\r><\n>Bin version(Wroom32):1.1.2<\r><\r><\n>I (580) wifi: wifi firmware version: de47fad<\r><\n>I (580) wifi: config NVS flash: enabled<\r><\n>I (580) wifi: config nano formating: disabled<\r><\n>I (590) wifi: Init dynamic tx buffer num: 32<\r><\n>I (590) wifi: Init data frame dynamic rx buffer num: 32<\r><\n>I (590) wifi: Init management frame dynamic rx buffer num: 32<\r><\n>I (596) wifi: wifi driver task: 3ffdecc0, prio:23, stack:3584<\r><\n>I (601) wifi: Init static rx buffer num: 10<\r><\n>I (604) wifi: Init dynamic rx buffer num: 32<\r><\n>I (609) wifi: wifi power manager task: 0x3ffdfd8c prio: 21 stack: 2560<\r><\n>I (644) wifi: mode : softAP (fc:f5:c4:0f:68:01)<\r><\n>I (652) wifi: mode : sta (fc:f5:c4:0f:68:00) + softAP (fc:f5:c4:0f:68:01)<\r><\n>I (656) wifi: mode : softAP (fc:f5:c4:0f:68:01)<\r><\n>

Maak hier maar eens chocola van... :'(

Ik heb ooit een beschrijving van dat firmwareloader programmaatje gehad, zal eens kijken of ik die nog ergens heb...
Komt die data uit de UART0 of de UART2? (uit de UART0 kan allerlei debug rommel komen, voor communicatie moet je UART2 gebruiken)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Nou, Uart0 of 2..

Ik heb het moduulje via de USB connector aan de PC hangen. Alle communicatie verloopt via die USB. Voor de computer is het COM5.
Het programmeren/flashen verloopt ook via die kabel.

Mbv Hterm (of ATCommandTester, of PuTTY) lees ik dan de COM5 poort uit...

Ik had ook al een proefje gedaan door de ESP32 via zijn RX2/TX2 te verbinden met een andere USB poort middels een UART-USB converter-muduultje..
Maar dat leverde ook niks op.

Ik volgde deze tutorial

https://www.youtube.com/watch?v=W_XbwjBwqME

voor het flashen van de ESP32 voor AT firmware..

Tja,

Ik weet natuurlijk niet hoe dat printje in mekaar gestoken is, maar in de datasheet staat waar UART0 en 2 zitten:

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

UART0 en 2 staan daar dus duidelijk op...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ja, dat zijn dus die RX0/TX0 en RX2 en TX2. Daar had ik al mee 'gespeeld' maar er kwam geen enkele respons uit.
Nog maar een keer proberen.

Even een zijsprongetje: voor het poorten testen heb ik 2 moduultjes van USB naar UART met een 2104 chip. Eentje met een 'gewone' USB en eentje met een mini USB.

Als ik de TX en RX verbindt en met Hterm iets verstuur, dan moet de receive dus gelijk zijn aan wat je verstuurt.
Dat werkt voor de gewone USB.

De mini USB geeft niks terug. Deze heeft echter ook een DTR pin.
Ik heb al lopen zoeken, maar weet niet of dit de oorzaak van niet-werken is.
Wat moet ik met die pin? los laten? Hoog? Laag?
(Bij Arduino koppelen ze hem aan de Reset van de Controller)

Geen idee hoe dat printje in elkaar steekt, dus wat ze met de DTR pin doen weet ik ook niet...
HTerm gebruikt DTR niet (of je moet dat speciaal aanzetten), dus als je RX-TX doorverbindt moet dat sowieso geëchood worden...

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ja, dat dacht ik dus ook..

De mini usb geeft geen respons.

Wel gaat er een extra ledje branden op het ding als je RX en TX doorverbinbdt. Maar daar houdt het mee op.

Volgens de drivers is het een CP210x USB to Uart Bridge.

Nog een beetje gespeeld met drivers (De mini USB installeerde niet 'vanzelf', daarom de CP2102 drivers van Silicon gedownload).

Maar het werkt gewoon niet. Ik kan op dit moment geen andere conclusie trekken dat het dingetje gewoon stuk is.

voor communicatie moet je UART2 gebruiken)

Terug naar de ESP32, dat werkt nu!

Het flashen opnieuw gedaan en inderdaad verbinding gemaakt met de UART2 van de ESP32 (via het werkende USB-UART moduultje).

En nu reageert het ding op AT commando's.
Gelukkig gaat er wel eens wat goed! ;)

Nu maar eens kijken of ik het via het MkroBasic programma ook aan de praat krijg...

Punt van aandacht: Het beste is om altijd hoofdletters te gebruiken bij de AT commando's. Sommige commando's zijn case sensitive en andere weer niet.
(kun je lang naar zoeken... :( )

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Hoofdletters zijn idd soms hoofdbrekers...

Nu zie ik wel dat wanneer ik met Hterm AT-Commando's stuur, ik exact hetelfde terugkrijg als ik verstuur.
(Ma.w. een normale echo).

bv een lijst met accesspoints met AT+CWLAP, zou je dan op de monitor de lijst moeten zien?

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Dan gaat er dus nog iets niet goed. Ik krijg nu wel respons, maar alles wat ik intik, krijg ik weer terug in de receive box.

Het gedraagt zich dus net alsof RX en TX aan elkaar vastzitten...

Met de ATCommand Tester lukt het nu om de AT commands te sturen. Ook de AT+CWLAP geeft resultaten.

Nu het vervolg: wanneer ik deze resultaten wil tonen in mijn MB prgramma, komen die dan binnen via de interrupt en kan ik die in een string plaatsen?
Is dat zo de juiste methode?

Dat kan, maar zoals gezegd:
Als je in een 'drukke' WiFi omgeving zit, kun je makkelijk 40 of meer AP's zien in de listing. Met alle opties aan krijg je dan zeker 1500 bytes of meer binnen.
Dat is lastig te verwerken met een 16F1847, die heeft (te) weinig ram.
Je kunt wel met AT+CWLAPOPT het aantal parameters zo laag mogelijk instellen, dat beperkt de datastroom nogal.

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com

Ok, Maar wat is dan de manier om het te tonen?
Het verzenden van de commanddo's gaat goed via MB/UART2. Maar hoe/waar lees ik het resultaat dan in?

In feite wikde ik eigenlijk geen lijst met AP-Points tonen, maar iets simpelers: in plaats van Bluetooth met WiFi een tekst inbrengen voor de lichtkrant.
Dat vraagt ook aanzienlijk minder data en is beheersbaar.

Maar hoe breng ik de tekst via bv een smartphone bv nu via WiFi over op de ESP32?
En de output in de Uart?