Problem
Poszukuję automatycznego sposobu wymiany (unowocześnienia) oprogramowania w kilku procesorach ATMega8 za pomocą ISP bez odłączania tych procesorów od płytki (będą SMD) oraz bez przepinania kabli i zworek. Proces wymiany oprogramowania ma być wystarczająco prosty aby mógł go przeprowadzić niewtajemniczony użytkownik. Po przeanalizowaniu sporej ilości materiałów stworzyłem projekt takiej operacji i proszę Forumowiczów o opinię czy to może zadziałać oraz wskazanie słabych punktów mojego rozumowania.
Kontekst
System będzie złożony z kilku procesorów atmega8 (slave) i sterowany za pomocą jednego atmega8(master) podłączonego do tabletu z systemem Android (serial to usb na układzie pl2303).
Ważne jest, że programator ma być częścią systemu i dać się sterować z tabletu. Problem połączenia tablet - ATMega udało się osiągnąć dzięki felixhaedicke-usb-serial-for-android (http://code.google.com/r/felixhaedicke-usb-serial-for-android/)
Moje rozwiązanie
Fragment rozwiązania znajduje się na obrazku ze schematem.
3x Slave na górze rysunku, na dole Master.
Decyzje projektowe
Jeśli moje rozumowanie jest błędne to proszę o pomoc.
ISP używa linii MISO, MOSI, RESET i SCK do programowania. MISO, MOSI i SCK każdego procesora można połączyć równolegle. Jeśli procesory nie używają SPI to nie będzie to przeszkadzało w programowaniu.
RESET zachowuje się trochę jak Slave Select (SS) - w stanie niskim włącza tryb programowania więc każdy procesor ma wyprowadzony RESET do Mastera. Master wybiera, który procesor programować za pomocą odpowiedniego pinu (tutaj 14, 15, lub 23 w masterze), który ustawia w stan niski na czas programowania i resztę wykonuje tak samo jak programator USBasp czy jakikolwiek inny programator ISP. Pozostałe procesory mogą w tym czasie pracować normalnie. Linie MISO, MOSI i SCK są zajęte przez programator ale pozostałe slave'y ich nie słuchają ponieważ nie używają SPI. Master gdy skończy może przystąpić do programowania kolejnego slave'a.
Program w masterze będzie zmodyfikowaną wersją ArduinoISP, który będzie kolejno przełączał się pomiędzy slave'ami. Jeśli będzie ich np 8 to wystarczy 8 razy włączyć programowanie na tablecie aby zaprogramować wszystkie. Numer ostatnio programowanego slave'a można zapisywać w eppromie. Z punktu widzenia tabletu nie będzie widać ile jest układów. Tablet będzie dostarczał nowy kod, który będzie pobrany z internetu.
Moje pytania:
1. Czy to w ogóle zadziała? (Mam na myśli programowanie w ten sposób)
2. Czy muszę podłączyć kwarce w jakimś miejscu jeśli wystarczy mi prędkość 8MHz?
3. Czy jeśli będę chciał aby Master pracował z prędkością 16Mhz a slave'y 8Mhz to czy nadal będzie się dało je programować?
4. Czy mogę używać pinu SS (pin 16) w slave bez przeszkód dla programowania?
5. Jeśli nie chcę resetować slave'a to muszę ustawić pin, do którego jest podłączony jego Reset w stan wysoki czy wystarczy w stan wysokiej impedancji jeśli mam rezystor podciągający (R2, R4, R5)?
6. Czy resetowanie Mastera nie spowoduje resetu któregoś Slave'a lub odwrotnie?
7. Czy niezaprogramowany układ jest w stanie zakłócić programowanie innych? Np gdy pierwszy raz wgrywam oprogramowanie do pierwszego slave'a to czy kolejne podłączone nie przeszkadzają?
Poszukuję automatycznego sposobu wymiany (unowocześnienia) oprogramowania w kilku procesorach ATMega8 za pomocą ISP bez odłączania tych procesorów od płytki (będą SMD) oraz bez przepinania kabli i zworek. Proces wymiany oprogramowania ma być wystarczająco prosty aby mógł go przeprowadzić niewtajemniczony użytkownik. Po przeanalizowaniu sporej ilości materiałów stworzyłem projekt takiej operacji i proszę Forumowiczów o opinię czy to może zadziałać oraz wskazanie słabych punktów mojego rozumowania.
Kontekst
System będzie złożony z kilku procesorów atmega8 (slave) i sterowany za pomocą jednego atmega8(master) podłączonego do tabletu z systemem Android (serial to usb na układzie pl2303).
Ważne jest, że programator ma być częścią systemu i dać się sterować z tabletu. Problem połączenia tablet - ATMega udało się osiągnąć dzięki felixhaedicke-usb-serial-for-android (http://code.google.com/r/felixhaedicke-usb-serial-for-android/)
Moje rozwiązanie
Fragment rozwiązania znajduje się na obrazku ze schematem.
3x Slave na górze rysunku, na dole Master.
Decyzje projektowe
Jeśli moje rozumowanie jest błędne to proszę o pomoc.
ISP używa linii MISO, MOSI, RESET i SCK do programowania. MISO, MOSI i SCK każdego procesora można połączyć równolegle. Jeśli procesory nie używają SPI to nie będzie to przeszkadzało w programowaniu.
RESET zachowuje się trochę jak Slave Select (SS) - w stanie niskim włącza tryb programowania więc każdy procesor ma wyprowadzony RESET do Mastera. Master wybiera, który procesor programować za pomocą odpowiedniego pinu (tutaj 14, 15, lub 23 w masterze), który ustawia w stan niski na czas programowania i resztę wykonuje tak samo jak programator USBasp czy jakikolwiek inny programator ISP. Pozostałe procesory mogą w tym czasie pracować normalnie. Linie MISO, MOSI i SCK są zajęte przez programator ale pozostałe slave'y ich nie słuchają ponieważ nie używają SPI. Master gdy skończy może przystąpić do programowania kolejnego slave'a.
Program w masterze będzie zmodyfikowaną wersją ArduinoISP, który będzie kolejno przełączał się pomiędzy slave'ami. Jeśli będzie ich np 8 to wystarczy 8 razy włączyć programowanie na tablecie aby zaprogramować wszystkie. Numer ostatnio programowanego slave'a można zapisywać w eppromie. Z punktu widzenia tabletu nie będzie widać ile jest układów. Tablet będzie dostarczał nowy kod, który będzie pobrany z internetu.
Moje pytania:
1. Czy to w ogóle zadziała? (Mam na myśli programowanie w ten sposób)
2. Czy muszę podłączyć kwarce w jakimś miejscu jeśli wystarczy mi prędkość 8MHz?
3. Czy jeśli będę chciał aby Master pracował z prędkością 16Mhz a slave'y 8Mhz to czy nadal będzie się dało je programować?
4. Czy mogę używać pinu SS (pin 16) w slave bez przeszkód dla programowania?
5. Jeśli nie chcę resetować slave'a to muszę ustawić pin, do którego jest podłączony jego Reset w stan wysoki czy wystarczy w stan wysokiej impedancji jeśli mam rezystor podciągający (R2, R4, R5)?
6. Czy resetowanie Mastera nie spowoduje resetu któregoś Slave'a lub odwrotnie?
7. Czy niezaprogramowany układ jest w stanie zakłócić programowanie innych? Np gdy pierwszy raz wgrywam oprogramowanie do pierwszego slave'a to czy kolejne podłączone nie przeszkadzają?
