Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Pages: [1] 2 3 ... 6   Go Down
Author Topic: Modificare firmware 16U2 dell'Arduino Uno per eliminare l'autoreset  (Read 5710 times)
0 Members and 1 Guest are viewing this topic.
Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Stavo ca@@eggiando sulle pagine della DUE e ad un certo punto leggo questo:

Quote
The Programming port is connected to an ATmega16U2, which provides a virtual COM port to software on a connected computer (To recognize the device, Windows machines will need a .inf file, but OSX and Linux machines will recognize the board as a COM port automatically.). The 16U2 is also connected to the SAM3X hardware UART. Serial on pins RX0 and TX0 provides Serial-to-USB communication for programming the board through the ATmega16U2 microcontroller. The Arduino software includes a serial monitor which allows simple textual data to be sent to and from the board. The RX and TX LEDs on the board will flash when data is being transmitted via the ATmega16U2 chip and USB connection to the computer (but not for serial communication on pins 0 and 1).

e poi questo:
Quote
Programming port: To use this port, select "Arduino Due (Programming Port)" as your board in the Arduino IDE. Connect the Due's programming port (the one closest to the DC power jack) to your computer. The programming port uses the 16U2 as a USB-to-serial chip connected to the first UART of the SAM3X (RX0 and TX0). The 16U2 has two pins connected to the Reset and Erase pins of the SAM3X. Opening and closing the Programming port connected at 1200bps triggers a “hard erase” procedure of the SAM3X chip, activating the Erase and Reset pins on the SAM3X before communicating with the UART. This is the recommended port for programming the Due. It is more reliable than the "soft erase" that occurs on the Native port, and it should work even if the main MCU has crashed.

quindi la domanda mi sorge spontanea.
Posso mettere il firmware che si usa sulla DUE nel 16U2 dell'Arduino UNO R3 e ottenere lo stesso comportamento per la programmazione della Leonardo. Ovvero senza il reset del micro ogni volta che apro la seriale?

Non ho ancora controllato se i collegamenti tra il 16U2 delle DUE e quello della UNO R3 sia identici (Seriale e Reset), ma nel caso, ci sarebbero delle modifiche da fare al firmware prima di sostituirlo?

Poi bisognerà istruire anche l'IDE per trattare la programmazione della UNO come una Leonardo? Giusto?

@ArduinoTeam
E' una modifica che farete sulla UNO R4?

UPDATE:
E' stato creato da Astro un apposito bootloader --> http://arduino.cc/forum/index.php/topic,130621.msg982176.html#msg982176
« Last Edit: November 04, 2012, 09:18:38 am by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 575
Posts: 12769
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non mi sono messo a tradurre i tuoi quote smiley-sweat ti dico quello che so: l'impulso di RESET all'apertura del serial monitor lo manda l'IDE tramite un segnale al convertitore USB-Seriale che gli fa semplicemente generare un DTR; la cosa l'ho scoperta quando ho fatto sperimentazione con l'MCP2200 che NON ha il DTR bensì l'RTS; in questo caso continuo ad avere le normali funzionalità di RESET ma quando apro il SM Arduino NON si resetta.
L'IDE manda entrambi i DTR e RTS (ovviamente le istruzioni per farli eseguire al convertitore) quando deve resettare la scheda solo nel caso del SM invece manda DTR ma non RTS.
In conclusione penso che agendo sul convertitore si possa disabilitare completamente il RESET, cosa peraltro facilmente fattibile interrompendo il jumper a saldare previsto o mettendo un C da 10µF tra 3,3V e RESET, ma non bloccare il comando proveniente dall'IDE SOLO nel caso del SM.
Sono interessato alla discussione smiley
Logged


Forum Administrator
Offline Offline
God Member
*****
Karma: 52
Posts: 646
I find plain exciting
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il firmware che gira sul 16U2 della Due non è per nulla compatibile con la Uno.. Quel processore fa una sequenza di Erase/Reset per riprogrammare la scheda che non sono quelli necessari alla Uno.

Per eliminare il reset basta tagliare la pista in mezzo ai due pad vicino a RESET_EN

Non è in programma una Uno R4 a questo punto.

m
Logged

Dueville (VI)
Offline Offline
Edison Member
*
Karma: 28
Posts: 1785
http://cesarecacitti.wordpress.com/
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il firmware che gira sul 16U2 della Due non è per nulla compatibile con la Uno.. Quel processore fa una sequenza di Erase/Reset per riprogrammare la scheda che non sono quelli necessari alla Uno.

Per eliminare il reset basta tagliare la pista in mezzo ai due pad vicino a RESET_EN

Non è in programma una Uno R4 a questo punto.

m
La DUE non è di certo adatta ai principianti, volete dismettere la UNO che è il punto di partenza? smiley-cry
Logged

Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La DUE non è di certo adatta ai principianti, volete dismettere la UNO che è il punto di partenza? smiley-cry
Semplicemente la UNO verrà lasciata com'è, immagino senza più evoluzione.

Logged


Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il firmware che gira sul 16U2 della Due non è per nulla compatibile con la Uno.. Quel processore fa una sequenza di Erase/Reset per riprogrammare la scheda che non sono quelli necessari alla Uno.
Peccato.
Un sistema come quello della Leonardo, importato sulla UNO lo troverei più comodo che non tagliare la pista.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Un sistema come quello della Leonardo, importato sulla UNO lo troverei più comodo che non tagliare la pista.
Il sistema della Leonardo si basa sull'uso di una circuiteria interna al micro stesso. Attivando uno specifico fuse, si può fare in modo che all'apertura e chiusura della seriale il micro si autoresetti. In questo modo può partire il bootloader e scrivere l'eventuale nuovo firmware in arrivo.
Sui 328 non c'è nulla di simile all'interno del microcontrollore.
Logged


Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok per la Leonardo. Ma lo stesso sistema è usato sulla DUE che usa il 16U2. Ecco perché pensavo che si potesse modificare il firmware per adattarlo alla UNO in modo che si potesse programmare come la Leonardo.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Vediamo se ho capito.
Tu vorresti riscrivere il firmware del 16U2 della UNO per far sì che esso invii il segnale di reset all'Atmega328 solo in determinate condizioni, modificando opportunamente l'IDE.
Logged


Rome (Italy)
Offline Offline
Shannon Member
****
Karma: 141
Posts: 10131
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Attivando uno specifico fuse, si può fare in modo che all'apertura e chiusura della seriale il micro si autoresetti. In questo modo può partire il bootloader e scrivere l'eventuale nuovo firmware in arrivo.

Non esiste nessun fuse del genere nei 8/16u2, esistono due fuse dedicati al reset, il primo è BOOTRST che consente di specificare se dopo un reset, hardware, il program counter parte dall'indirizzo 0 oppure dall'indirizzo in cui è posto il bootloader, dipende dalle dimensioni dell'area riservata (vedere relativa tabella sul datasheet).
Il secondo fuse è HWBE e consente di utilizzare il pin PD7 del micro per scegliere se dopo un reset il program counter parte dall'indirizzo 0 oppure da quello in cui si trova il bootloader.
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 115
Posts: 7347
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vediamo se ho capito.
Tu vorresti riscrivere il firmware del 16U2 della UNO per far sì che esso invii il segnale di reset all'Atmega328 solo in determinate condizioni, modificando opportunamente l'IDE.
Esatto. Anche se al momento non sono in grado di fare queste modifiche. Almeno credo.  smiley-roll
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Attivando uno specifico fuse, si può fare in modo che all'apertura e chiusura della seriale il micro si autoresetti. In questo modo può partire il bootloader e scrivere l'eventuale nuovo firmware in arrivo.

Non esiste nessun fuse del genere nei 8/16u2, esistono due fuse dedicati al reset, il primo è BOOTRST che consente di specificare se dopo un reset, hardware, il program counter parte dall'indirizzo 0 oppure dall'indirizzo in cui è posto il bootloader, dipende dalle dimensioni dell'area riservata (vedere relativa tabella sul datasheet).
Il secondo fuse è HWBE e consente di utilizzare il pin PD7 del micro per scegliere se dopo un reset il program counter parte dall'indirizzo 0 oppure da quello in cui si trova il bootloader.
Mi riferivo alla Leonardo, che ha il 32U4. Tempo fa ho indagato come funziona il reset ed è come ho descritto io.
Logged


0
Offline Offline
Faraday Member
**
Karma: 49
Posts: 6071
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la soluzione e' molto piu' semplice, e non capisco perche' l'ArduinoTeam non se ne faccia carico.
Bisogna sistemare la RXTXSerial che e' vecchissima.
Con la versione modificata che ho postato tempo fa non c'e' questo problema

Visto che questa .dll e' alla base delle comuniczioni arduiniche sarebbe buona cosa iniziare ad inserire quella modificata nell'IDE prossimo, e poi magari contribuire al suo sviluppo, ad esempio servirebbe un porting 64bit
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 342
Posts: 23339
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

la soluzione e' molto piu' semplice, e non capisco perche' l'ArduinoTeam non se ne faccia carico.
Bisogna sistemare la RXTXSerial che e' vecchissima.
Con la versione modificata che ho postato tempo fa non c'e' questo problema

Visto che questa .dll e' alla base delle comuniczioni arduiniche sarebbe buona cosa iniziare ad inserire quella modificata nell'IDE prossimo, e poi magari contribuire al suo sviluppo, ad esempio servirebbe un porting 64bit
Hai le modifiche che hai apportato? Non voglio l'eseguibile perché tu hai Windows ed io Linux.
Logged


Rome (Italy)
Offline Offline
Shannon Member
****
Karma: 141
Posts: 10131
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi riferivo alla Leonardo, che ha il 32U4. Tempo fa ho indagato come funziona il reset ed è come ho descritto io.

Sto guardando adesso il datasheet e non vedo nessun fuse che fa quello che dici tu, per il reset ci sono solo i due BOOTRST e HWBE presenti nel 8/16u2.

Code:
27.5 Entering the Boot Loader Program
The bootloader can be executed with three different conditions:

27.5.1 Regular application conditions.
A jump or call from the application program. This may be initiated by a trigger such as a com-mand received via USART, SPI or USB.

27.5.2 Boot Reset Fuse
The Boot Reset Fuse (BOOTRST) can be programmed so that the Reset Vector is pointing to
the Boot Flash start address after a reset. In this case, the Boot Loader is started after a reset.
After the application code is loaded, the program can start executing the application code. Note
that the fuses cannot be changed by the MCU itself. This means that once the Boot Reset Fuse

27.5.3 External Hardware conditions
The Hardware Boot Enable Fuse (HWBE) can be programmed (See Table 27-5) so that upon
special hardware conditions under reset, the bootloader execution is forced after reset.

Non parla di fuse speciali, parla di una ben precisa azione comandata da software in risposta ad un comando ricevuto da una periferica, oppure l'uso del pin reset eventualmente abbinato a PE2 per scegliere da dove far partire il program counter.
Logged

Pages: [1] 2 3 ... 6   Go Up
Arduino Forum upgrade scheduled for Monday, October 20th, 11am-4pm (CEST). Sorry for the inconvenience!
Jump to: