News:

Sostienici con una piccola Donazione per le spese di mantenimento del vostro sito!

Menu principale

Denso Renesas SH7055 Arduino/FTDI read and write

Aperto da absinth84, 16 Mag 2025 - 22:30

Discussione precedente - Discussione successiva

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

absinth84

Ciao a tutti,
recentemente ho fatto degli studi relativi alle ecu Denso con microprocessore SH70xx e ho realizzato una guida per poterle scrivere con il software ufficiale di Renesas usando un Arduino uno oppure un adattatore USB seriale FTDI.

Ho testato la procedura su una Denso 3392X Suzuki che sono riuscito a recuperare a poco, e SH7055 39P-8591A-XX Yamaha Fz8 (mia moto)

Sulle moto basta anche solo FTDI e si fa da bench senza aprire. Sulle auto serve arduino perché' va generata un'onda quadra per evitare il riavvio del micro.
Appena ci si collega alle ecu in modalità' boot con il software tutto contenuto della flash viene cancellato.


Il software non corregge il checksum che andrà' fatto precedentemente. Con questo metodo, avendo file originale la ecu e' sempre ripristinabile.

Vi allego guida che ho realizzato e chiedete pure se vi servono piu' info.


Nel txt allegato trovate il link e la pass per scaricarla



Sto lavorando anche an un software che ne permette la lettura utilizzando gli stessi collegamenti di ktag e dimsport sempre con arduino.
Il software e' in alfa e supporta SH7055 e SH7058, se qualcuno volesse testarlo lo posso passare.





ADMIN

Ciao @absinth84 e complimenti per lo sbattimento che ti sei andato a creare!
Ho due domande da farti:
1) l'onda che generi con Arduino vedo che:
Usi il Timer1 in CTC
L'onda quadra è a 125Hz sul PIN 9 di Arduino
Non usi i classici delay o loop ma usi toggle di confronto con OCR1A per il reset
Come hai ottenuto questa frequenza?
2) oltre al condividere una idea a dir poco eccellente purché sperimentale, che ovviamente ci piace e sarà motivo di confronto per chi vuole collaborare nei beta-test, anzi alpha-test, qualé lo scopo di questo post?
Hai sicuramente condiviso una idea ma non hai definito lo scopo di questo post.
#!/bin/hack

ADMIN

Inoltre, in caso di necessità di modifica della frequenza di reset, io farei un codice del genere:

const uint8_t outputPin = 9;
const uint32_t baseClock = 16000000;
const uint16_t prescaler = 64;
const uint16_t desiredFrequency = 125;

void setup() {
  pinMode(outputPin, OUTPUT);
  cli();
  TCCR1A = _BV(COM1A0);
  TCCR1B = _BV(WGM12);
  TCCR1B |= _BV(CS11) | _BV(CS10);
  OCR1A = (baseClock / (2UL * prescaler * desiredFrequency)) - 1;
  sei();
}

void loop() {}

Molte meno modifiche per variare il target, così da poter impostare unica variabile su eventuale tool con GUI.
Cmq ottimo lavoro amico e complimenti per l'idea sicuramente utile e scalabile per molte funzionalità!
#!/bin/hack

absinth84

#3
Citazione di: ADMIN il 17 Mag 2025 - 10:55Ciao @absinth84 e complimenti per lo sbattimento che ti sei andato a creare!
Ho due domande da farti:
1) l'onda che generi con Arduino vedo che:
Usi il Timer1 in CTC
L'onda quadra è a 125Hz sul PIN 9 di Arduino
Non usi i classici delay o loop ma usi toggle di confronto con OCR1A per il reset
Come hai ottenuto questa frequenza?
2) oltre al condividere una idea a dir poco eccellente purché sperimentale, che ovviamente ci piace e sarà motivo di confronto per chi vuole collaborare nei beta-test, anzi alpha-test, qualé lo scopo di questo post?
Hai sicuramente condiviso una idea ma non hai definito lo scopo di questo post.


Grazie fa piacere e spero possa essere d'aiuto.

I timer invece dei delay si usano per evitare l'interruzione del dell'esecuzione software, e' una sorta di finto parallelismo, in caso di delay la cpu aspetta senza fare nulla, invece col timer e interrupt quando viene il suo momento esegue quello che deve e prima e dopo continua a essere eseguito il software principale.
In questo caso dato che di software non c'è n'é sarebbe identico ma ho usato lo stesso approccio che c'é anche nel software di lettura dove li di logica c'è n'é eccome.

Al codice dell'onda quadra sinceramente non ci ho dato troppo peso dato che e' un'impostazione di setup e l'ho solo verificata con oscilloscopio, e il suo scopo e' solo da watchdog per evitare il reboot del processore, non e' un clock o qualcosa di piu' strutturato. Onestamente l'ho trovato in qualche esempio e l'ho applicato. Non ha necessita' di essere variata per cui... e in nel caso di scrittura arduino fa solo quello e la seriale e passthru.
Potresti fare lo stesso con un circuito oscillare e un ftdi.

Il software per scrivere non e' una alpha, di mio c'e' poco solo l'utilizzo di un arduino come seriale o ftdi ma si appoggia al software ufficiale del produttore per cui si può' andar tranquilli con quello. Lo scopo del post era sicuramente dare a tutti una procedura stabile senza dover avere hardware dedicato.




Altra cosa invece per le letture (quello che vedi negli screenshot e che ho sviluppato io), sebbene non mi dia mai errori di lettura l'ho provato solo io e sicuramente ha bisogno di ottimizzazioni.

Lo scopo di tutto e' condividere con voi la procedura di scrittura affidabile e vedere se qualcuno e' interessato a sperimentare e portare avanti il progetto.

Poi l'intenzione, una volta stabile e' di rilasciarlo open source su github

ADMIN

Intanto grazie per l'iniziativa che apprezzo, soprattutto se mirata all'opensource.
Il codice che ti ho fornito sopra è unicamente per migliorare la gestione dei carichi di memoria e poterlo modificare con semplicità per eventuali upgrade o adeguamenti su diverse onde di frequenza.
Puoi liberamente utilizzare quello che ritieni più adeguato al tuo scopo, la differenza è minima per lo scopo funzionale.
Grazie per la condivisione!
#!/bin/hack