Spisu treści:

Flashowanie niestandardowego oprogramowania układowego do latarki BLF A6: 5 kroków
Flashowanie niestandardowego oprogramowania układowego do latarki BLF A6: 5 kroków

Wideo: Flashowanie niestandardowego oprogramowania układowego do latarki BLF A6: 5 kroków

Wideo: Flashowanie niestandardowego oprogramowania układowego do latarki BLF A6: 5 kroków
Wideo: Huawei E3131 - New Firmware Flash (Aktualizacja Oprogramowania) 2024, Lipiec
Anonim
Flashowanie niestandardowego oprogramowania układowego do latarki BLF A6
Flashowanie niestandardowego oprogramowania układowego do latarki BLF A6

Niedawno dostałem BLF A6. Jest bardzo ładny, ale nie podoba mi się żadna z domyślnych grup trybów, więc zmodyfikowałem oprogramowanie układowe, aby używało moich preferowanych jasności. Trudno było znaleźć informacje, więc wszystko, czego się tutaj nauczyłem, umieszczam dla siebie i innych.

Kieszonkowe dzieci

BLF A6 (prawdopodobnie będzie działał z innymi latarkami opartymi na ATtiny)

Pęseta/cienkie szczypce/małe nożyczki/coś do odkręcenia pierścienia ustalającego płyty sterowniczej

Komputer do flashowania, najlepiej z dystrybucją Linuksa

Programator USB ASP /Arduino/coś co potrafi programować AVR (podobno zalecany jest programator USB ASP, ale użyłem Arduino)

Klips SOIC8 (można się obejść bez, ale jest to bardzo kłopotliwe i wcale nie jest zalecane)

(opcjonalnie) Płytka do krojenia chleba i/lub przewody połączeniowe ułatwiające podłączenie

Krok 1: Pobierz oprogramowanie układowe

Oprogramowanie dla BLF A6 (i wielu innych latarek) jest dostępne tutaj. Autor mówi o tym tutaj. Możesz go pobrać, uruchamiając:

bzr branch lp:~toykeeper/flashlight-firmware/blf-a6-final

w terminalu. (może być konieczne zainstalowanie bzr)

Uwaga: w poprzedniej edycji tego Instructable użyłem zamiast tego „bzr branch lp: flashlight-firmware”. Od tego czasu dowiedziałem się, że pobiera przestarzałą wersję z niewłaściwymi wartościami kondensatora czasu wyłączenia, co powoduje, że naciskanie przycisku jest nieprzyjemnie długie. (dzięki temu wątkowi na Reddicie)

Wybrany folder to blf-a6-final/ToyKeeper/blf-a6. Zawiera skompilowany plik.hex gotowy do flashowania (blf-a6.hex) oraz kod C, który możesz modyfikować. (blf-a6.c) Jeśli chcesz sflashować standardowe oprogramowanie, możesz pominąć następny krok i po prostu użyć blf-a6.hex. Niektóre inne oprogramowanie układowe w tym repozytorium prawdopodobnie również będą działać.

Krok 2: Zmodyfikuj oprogramowanie sprzętowe

Otwórz blf-a6.c w preferowanym edytorze tekstu lub IDE. Najciekawszymi liniami są grupy modów pomiędzy liniami 116 i 131. Wyglądają one tak:

// Grupa trybów 1#define NUM_MODES1 7 // Poziomy PWM dla dużego obwodu (FET lub Nx7135) #define MODESNx1 0, 0, 0, 7, 56, 137, 255 // Poziomy PWM dla małego obwodu (1x7135) # zdefiniuj MODES1x1 2, 20, 110, 255, 255, 255, 0 // Moja próbka: 6=0..6, 7=2..11, 8=8..21(15..32) // Próbka Krono: 6=5..21, 7=17..32, 8=33..96(50..78) // Manker2: 2=21, 3=39, 4=47, … 6?=68 // Prędkość PWM dla każdego trybu #define MODES_PWM1 PHASE, FAST, FAST, FAST, FAST, FAST, PHASE // Grupa trybów 2 #define NUM_MODES2 4 #definiowanie MODESNx2 0, 0, 90, 255 #definiowanie MODES1x2 20, 230, 255, 0 #define MODES_PWM2 SZYBKO, SZYBKO, SZYBKO, FAZA

Dla każdej grupy MODESN jest wartością PWM używaną dla FET, a MODES1 jest wartością PWM używaną dla 7135 w każdym trybie. Liczba wynosi od 0 do 255 i odpowiada jasności światła. Więcej informacji tutaj. (przewiń w dół do „Regulacji trybu:”) Nie jestem pewien, jaka jest dokładnie prędkość PWM. Jeśli ktoś wie, powiedz mi w komentarzach. FET może wytwarzać więcej światła niż 7135, ale 7135 utrzymuje poziom światła mniej więcej taki sam przez cały okres eksploatacji baterii, podczas gdy FET staje się ciemniejszy, gdy wyczerpuje się bateria.

Tutaj możesz dostosować wartości PWM, aby uzyskać tryby według własnych upodobań. Prawdopodobnie możesz również zmienić liczbę trybów, ale nie próbowałem tego, ponieważ chciałem czterech trybów, które akurat są liczbą w drugiej grupie. Chciałem mieć ciemniejszy tryb księżyca, więc ustawiłem pierwszy na 0/1, a tryb turbo wydaje mi się trochę bezcelowy, więc zastąpiłem go 137/255, odpowiednikiem trybu szóstego w grupie siedmiu trybów. Prawdopodobnie możesz zmodyfikować resztę kodu, jeśli zajdzie taka potrzeba, ale nie próbowałem tego.

Kiedy już masz kod, który chcesz, musisz skompilować go do pliku.hex. Przynajmniej potrzebujesz gcc-avr i avr-libc. Jeśli masz problemy, spójrz na inne zależności w pliku readme oprogramowania układowego. Repozytorium zawiera skrypt budujący, ale nie mogłem go uruchomić. Zamiast tego pobrałem starą wersję za pomocą

bzr branch lp: latarka-oprogramowanie układowe

i skopiowałem stary skrypt kompilacji (który mogłem zabrać do pracy) na nowy. Potem pobiegłem:

../../bin/build.sh 13 blf-a6

w folderze blf-a6. (powinien być lepszy sposób na zrobienie tego)../../bin/build.sh wywołuje skrypt, 13 określa, że buduje dla ATtiny13, a blf-a6 określa, że jest przeznaczony dla BLF A6. (duh) Powinien powiedzieć ci, jakie komendy wykonuje i dać ci wynik. Mój wygląda tak:

avr-gcc -Wall -g -Os -mmcu=attiny13 -c -std=gnu99 -fgnu89-inline -DATTINY=13 -I.. -I../.. -I../../.. -fshort -enums -o blf-a6.o -c blf-a6.cavr-gcc -Wall -g -Os -mmcu=attiny13 -fgnu89-inline -o blf-a6.elf blf-a6.o avr-objcopy --set -section-flags=.eeprom=alloc, wczytaj --change-section-lma.eeprom=0 --no-change-warnings -O ihex blf-a6.elf blf-a6.hex Program: 1022 bajty (99,8% pełny) Dane: 13 bajtów (20,3% pełne)

Polecenia są już zoptymalizowane pod kątem rozmiaru, więc jeśli jest napisane, że jest zapełnione w ponad 100%, spróbuj skomentować

#define FULL_BIKING_STROBE

na linii 147, aby użyć mniejszego minimalnego stroboskopu rowerowego. Jeśli nadal nie pasuje, prawdopodobnie będziesz musiał gdzieś usunąć więcej kodu. Po zakończeniu kompilacji w folderze powinien znajdować się plik o nazwie blf-a6.hex. To jest Twój skompilowany kod, gotowy do flashowania.

Krok 3: Zdemontuj latarkę

Zdemontuj latarkę
Zdemontuj latarkę
Zdemontuj latarkę
Zdemontuj latarkę
Zdemontuj latarkę
Zdemontuj latarkę

Odkręć końcówkę żarówki w kierunku przeciwnym do ruchu wskazówek zegara. Tutaj są dwa połączenia śrubowe. Ten bliżej końca żarówki w latarce otwiera odbłyśnik i diodę LED, a ten bliżej środka otwiera tablicę sterowniczą. Chcesz, żeby był bliżej środka.

Wewnątrz powinieneś zobaczyć sprężynę baterii i pierścień ustalający z dwoma otworami. Włóż pęsety / cienkie szczypce / nożyczki do otworów i obróć je w kierunku przeciwnym do ruchu wskazówek zegara. Jest dość sztywny, a użycie dwóch oddzielnych obiektów prawdopodobnie nie zapewni wystarczającej dźwigni. Użyłem nożyczek na szwajcarskim nożu wojskowym.

Po wyjęciu pierścienia uwolnij płytkę sterowniczą. Nadal jest przymocowany dwoma przewodami, więc bądź ostrożny. Są skręcone razem, więc obracaj płytkę w taki czy inny sposób, aż przewody się poluzują. Kiedy będziesz mieć wystarczającą swobodę, odwróć planszę. Chcesz, żeby chip z napisem „TINY13A” był wyższy i bardziej dostępny. Jeśli jest po złej stronie, odwróć ją w drugą stronę. Wsuń sprężynę pod bok. To tymczasowo utrzyma go na miejscu i ułatwi dotarcie do chipa. Jeśli masz z tym problem, prawdopodobnie możesz odkręcić drugie złącze i wylutować dwa przewody z drugiej strony, aby całkowicie usunąć płytkę, ale tego nie próbowałem.

Krok 4: Podłącz migający sprzęt

Podłącz migający sprzęt
Podłącz migający sprzęt
Podłącz migający sprzęt
Podłącz migający sprzęt
Podłącz migający sprzęt
Podłącz migający sprzęt

Teraz używasz klipsa SOIC8 do połączenia układu ATtiny13 i programatora. Z moim klipsem SOIC8, jeśli mam czerwony przewód po lewej stronie obu końców, rząd pinów bliżej mnie na końcu klipu odpowiada rzędowi pinów bliżej mnie na końcu złącza, gdy złącze jest skierowane w dół. (zobacz mój super-artystyczny diagram) Ten przewodnik zaleca korzystanie z programatora USB ASP V2.0. Jeśli tak, połącz to w ten sposób:

  • Pin 1 na ATtiny13 do pinu 5 na USB ASP (reset)
  • Pin 4 na ATtiny13 do pinu 10 na USB ASP (masa)
  • Pin 5 na ATtiny13 do pinu 1 na USB ASP (MOSI)
  • Pin 6 na ATtiny13 do pinu 9 na USB ASP (MISO)
  • Pin 7 na ATtiny13 do pinu 7 na USB ASP (SCK)
  • Pin 8 na ATtiny13 do pinu 2 na USB ASP (VCC)

Jeśli, tak jak ja, używasz Arduino, musisz zrobić trochę więcej przygotowań. Wykonaj kroki zero i dwa tego przewodnika:

Otwórz Arduino IDE i upewnij się, że Arduino jest podłączone do komputera. Znajdź szkic ISP w Plik>Przykłady>11. ArduinoISP>ArduinoISP i prześlij go do swojego Arduino. Następnie podłącz do niego ATtiny13 w ten sposób:

  • Pin 1 na ATtiny13 do pinu 10 na Arduino (reset)
  • Pin 4 na ATtiny13 do GND na Arduino (masa)
  • Pin 5 na ATtiny13 do pinu 11 na Arduino (MOSI)
  • Pin 6 na ATtiny13 do pinu 12 na Arduino (MISO)
  • Pin 7 na ATtiny13 do pinu 13 na Arduino (SCK)
  • Pin 8 na ATtiny13 do VCC / 5 V / 3,3 V na Arduino (każdy powinien działać, ale 5 V jest bardziej niezawodny) (VCC)

Zainstalowałem też pakiet sprzętu, ale prawdopodobnie nie było to konieczne. Jeśli masz wątpliwości, spróbuj. To nie zaszkodzi. Ale nie spalaj bootloadera, ponieważ prawdopodobnie zepsuje twoją latarkę.

Krok 5: Flash It

Aby sflashować oprogramowanie, musisz zainstalować AVRDUDE. Aby sprawdzić, czy działa z moim Arduino, uruchamiam:

avrdude -v -p attiny13 -c stk500v1 -P /dev/ttyUSB0 -b 19200 -n

Jeśli to zadziała, przenoszę się gdzieś do pustego folderu i uruchamiam:

avrdude -v -p attiny13 -c stk500v1 -P /dev/ttyUSB0 -b 19200 -u -Uflash:r:flash-dump.hex:i -Ueeprom:r:eeprom-dump.hex:i -Ulfuse:r:lfuse -dump.hex:i -Uhfuse:r:hfuse-dump.hex:i

Aby wykonać kopię zapasową istniejącego oprogramowania. A żeby to sflashować, z folderu ze zmodyfikowanym blf-a6.hex uruchamiam:

avrdude -v -p attiny13 -c stk500v1 -P /dev/ttyUSB0 -b 19200 -u -Uflash:w:blf-a6.hex -Ulfuse:w:0x75:m -Uhfuse:w:0xFF:m

Z jakiegoś powodu muszę określić stk500v1 jako programator i nie działało, chyba że określiłem port i szybkość transmisji. Jeśli używasz Arduino i masz wątpliwości, spróbuj odłączyć ATtiny13 od Arduino i przesłać szkic do Arduino IDE, korzystając z ustawień tutaj. Zawiedzie, ale powinien powiedzieć, jakiego polecenia używa w oknie konsoli. Atrybuty można skopiować do polecenia AVRDUDE.

Jeśli używasz programatora USB ASP, zamiast tego uruchom:

avrdude -v -p attiny13 -c usbasp -n

Aby sprawdzić, czy to działa i:

avrdude -v -p attiny13 -c usbasp -u -Uflash:r:flash-dump.hex:i -Ueeprom:r:eeprom-dump.hex:i -Ulfuse:r:lfuse-dump.hex:i -Uhfuse: r:hfuse-dump.hex:i

Aby wykonać kopię zapasową i:

avrdude -v -p attiny13 -c usbasp -u -Uflash:w:blf-a6.hex -Ulfuse:w:0x75:m -Uhfuse:w:0xFF:m

Aby to sflashować.

-Uflash:w:blf-a6.hex odnosi się do pliku, który flashuje. Zastąp blf-a6.hex nazwą swojego pliku, jeśli jest inna.

-Ulfuse:w:0x75:mi -Uhfuse:w:0xFF:m to bezpieczniki. Twoje może być inne, więc dokładnie sprawdź wartości w flashlight-firmware/bin/flash-tiny13-fuses.sh.

Jeśli daje błąd poza zakresem, oznacza to, że obraz jest zbyt duży, aby zmieścić się na chipie i musisz usunąć część kodu. Jeśli pomyślnie miga, powinien wyświetlić kilka pasków postępu, a następnie powiedzieć „zrobione. Dziękuję”.

Jeśli jest napisane „nieprawidłowa sygnatura urządzenia”, a zworka w programatorze jest ustawiona na 3,3 V, spróbuj ustawić ją na 5 V.

Po sflashowaniu złóż z powrotem latarkę i sprawdź, czy działa. Kopalnia zrobił, ale termin jest wyłączony dla niektórych ̶r̶e̶a̶s̶o̶n̶.̶ dłuższej prasach muszą być około trzy sekundy zamiast ̶1̶.̶5̶.̶ Nie wiem, czy its coś zrobić z Arduino lub dlatego Ive używany nieprawidłowe ustawienia ̶s̶o̶m̶e̶w̶h̶e̶r̶e̶.̶ Jeśli masz jakiś pomysł, ̶ daj mi znać w ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶

Edycja: naprawiłem to. (patrz krok 1)

Zalecana: