Programator pamięci SRAM EX-314 w starszych urządzeniach ICOM

Posiadacze i użytkownicy starszych urządzeń ICOM wiedzą, że zawartość znajdującej się w ich wnętrzu pamięci SRAM jest podtrzymywana baterią litową. Wyczerpanie baterii w układzie pokazanym na zdjęciach Fot. 1 (i wielu innych zdjęciach dostępnych w Internecie) skutkuje awarią uniemożliwiającą poprawną pracę transceivera, odbiornika itp [1].

Fot. 1. Moduł EX-314: widok od góry
widok od spodu

 

 

 

 

 

 

W ciągu kilkudziesięciu lat pojawiły się zamienniki układu EX-314 reklamowane jako wieczne tzn. niezapominające wprowadzonego do nich kodu [2 – 4]. Jednak moje wątpliwości wzbudza fakt wyposażenia każdego z tych układów w baterię litową wobec ich „nieśmiertelności”. Równolegle pojawiły się opisy procedur wymiany wlutowanej w płytkę drukowaną baterii litowej na nową [6, 7], a także wykorzystania różnego rodzaju programatorów (fabrycznych lub samodzielnie skonstruowanych) do wpisania adekwatnego kodu do układu EX-314 [8-10]. Z jednej strony cena programatorów fabrycznych [11] jest relatywnie wysoka, a współpraca z układem SRAM niepewna, a z drugiej to software do układów home made zwykle jest napisany w języku wyższego rzędu (zwykle C np. [8]) i skutkiem tego nie daje możliwości do zapewnienia odpowiedniego timingu podczas procedury programowania. Pomijam już kwestię tego, że w niektórych upublicznionych programatorach DIY część niezbędnych opcji nie działa prawidłowo.

Mimo, że w moim IC-751A bateria działa prawidłowo od 32 lat (szok!) to spodziewałem się, iż każdego dnia zupełnie nieoczekiwanie może „zasłabnąć”. Jest to podstawowy powód, dla którego najpierw zaznajomiłem się z literaturą związaną z reaktywacją układu SRAM, a skutkiem przetrawienia zdobytych informacji zabrałem się za skonstruowanie adekwatnego urządzenia. Z oczywistych powodów najpierw wykonałem kilka urządzeń opisanych w Internecie, a skutkiem niepowodzeń zabrałem się za zaprojektowanie własnego.

Z punktu widzenia użytkownika starszych urządzeń ICOM’a zawartość SRAMu może nie być interesującą, a jedyną „siłą napędową” do podjęcia jakichkolwiek działań jest chęć utrzymania sprawnego działania posiadanego sprzętu. Oznacza to, że podstawowymi cechami programatora powinny być: odczyt zawartości pamięci EX-314 i jej przechowanie na czas wymiany baterii na nową, ponowne wgranie do niej zawartości po wymianie tejże baterii, a w przypadkach awaryjnych wgranie standardowej (przeznaczonej dla danego urządzenia) zawartości z przechowywanych w programatorze schematów do zrewitalizowanego SRAMu. Natomiast dla bardziej dociekliwych powinna być dostępna owa zawartość wraz możliwością jej zapisania w komputerze.

W projekcie programatora, ze względów ekonomicznych, wykorzystałem najtańsze podukłady, które często znajdują się w zasięgu ręki radioamatora – w jego szufladzie. Z tego względu jako system mikroprocesorowy zastosowałem płytkę Arduino Uno R3 dodając do niej jedynie układ  sterowania (microswitch 6×6), kontroli (4 diody LED) i złącz, którego schemat pokazano na Rys. 1. Dla ułatwienia, na pokazanym schemacie dodałem opisy poszczególnych pinów odpowiadających pinom Arduino oraz pinom procesora ATmega328P.

Rys. 1. Układ sterowania i kontroli programatora.

Schemat i projekt płytki drukowanej wykonałem przy użyciu programu KiCad i umieściłem w załączniku w pliku „Uklad sterowania i kontroli programatora.zip” . Płytkę drukowaną można wykonać za pomocą techniki termotransferu. Natomiast podczas montażu jako złącza J4 i J5 należy zastosować listwy wielopinowe o długości pinów nie mniejszej niż 14 mm. Jest to związane z aktualnie nietypowymi złączami występującymi w fabrycznych płytkach EX-314 – ICOM.

Zdjęcie połączenia tej płytki z płytką Arduino Uno pokazano na Fot. 2 ze względu na wskazanie położenia „kolorów” diod LED. Warto zwrócić na nim uwagę na zabezpieczenie taśmą izolacyjną gniazda USB (Arduino Uno) przed ewentualnym zwarciem ze ścieżkami na płytce układu sterowania i kontroli, a także na to, że płytka ta nie wymaga żadnej hardwaerowej modyfikacji.

Fot. 2. Zdjęcie układu sterowania i kontroli programatora „wetkniętego” w płytkę Arduino Uno R3.

W kolejnym kroku przygotowałem „programowy wsad” do procesora znajdującego się na płytce Arduino Uno. W tym celu korzystałem z darmowego pakietu programowego Microchip Studio, uprzednio zainstalowanego z pliku offline dostępnego na stronie [12]. Użytkownik po otwarciu tego programu i jego skonfigurowaniu dla pracy z assemblerem i procesorem ATmega328P powinien w uruchomionym projekcie przepisać (copy & paste) zawartość załączonego pliku main.asm . Plik jest edytowalny za pomocą Notatnika. Po kompilacji programu poleceniem Build uzyskuje się wsad do procesora w formacie Intel-Hex usytuowany w katalogu Debug. Przed kompilacją możliwym jest wybranie standardowego kodu jaki odpowiada urządzeniu, w którym docelowo ma pracować płytka EX-314. Wskazówki dotyczące sposobu wyboru zostały umieszczone w nagłówku pliku main.asm. Jeśli potrzebny jest jedynie kod do transceiverów IC-751 lub IC-751A to nie ma potrzeby wykonywania powyższych operacji i można wykorzystać jako wsad załączony plik o nazwie Loader.hex .

Wpisanie pliku hex do procesora w Arduino Uno można przeprowadzić programując drugą płytkę Arduino Uno jako programator „Arduino as ISP”. Nie jest to godne polecenia bowiem ten programator nie umożliwia odczytu zawartości EEPROM programowanego procesora. Znacznie lepiej jest skorzystać z programatora zewnętrznego np. USBASP (ja używałem AVRDragon) i wprowadzić kod hex do Arduino Uno przez złącze ICSP znajdujące się na jego płytce drukowanej. Po tym należy dokonać ustawienia FUSE BITS EXTENDED na 0xFD, FUSE BITS HIGH na 0xDF i FUSE BITS LOW 0xFF. Tą informację podaję raczej pro forma bowiem właśnie takie ustawienia są stosowane standardowo na płytkach Arduino Uno.

Po zaprogramowaniu procesora na płytce Arduino Uno konstruowany programator pamięci SRAM (EX-314) jest już gotowy do pracy. Wystarczy dołączyć do niego płytkę sterowania i kontroli (Fot. 2) oraz podłączyć Arduino Uno do gniazda USB w komputerze jako źródła zasilania. Praktycznie od razu po podłączeniu zapali się niebieska dioda wskazująca gotowość do wykonywania poleceń i jednocześnie zapali się na 5 sekund dioda zielona, potem na 5 sekund dioda żółta, później na 5 sekund dioda czerwona, a następnie powtórzy się sekwencja zapalania się tych diod. Należy tutaj wyjaśnić jakiego rodzaju polecenia można wydawać programatorowi:

  1. Podczas gdy pali się dioda niebieska i zielona to naciśnięcie klawisza spowoduje odczytanie pamięci SRAM (EX-314) i umieszczenie jej zawartości w pamięci EEPROM procesora Arduino Uno.
  2. Podczas gdy pali się dioda niebieska i żółta to naciśnięcie klawisza spowoduje przepisanie zawartość pamięci EEPROM procesora Arduino Uno do pamięci SRAM (EX-314).
  3. Podczas gdy pali się dioda niebieska i dioda czerwona to naciśnięcie klawisza spowoduje przepisanie standardowego kodu urządzenia wybranego przed kompilacją programu do pamięci SRAM (EX-314).

W każdym z powyższych przypadków po naciśnięciu klawisza zgaśnie (pozornie na chwilę) niebieska dioda sygnalizując wykonywanie nakazanej operacji. Zgaszenie tej diody będzie trwało przez cały czas wykonywania tej operacji i powtórne naciskanie klawisza nie spowoduje jej przerwania. Zatem posługiwanie się programatorem wymaga rozwagi tak aby nie nadpisać zawartości SRAM niepożądanym kodem.

Nie jestem rzecznikiem skakania do basenu póki nie sprawdzę, że jest w nim woda. Oznacza to, że warto najpierw sprawdzić działanie programatora zanim wykorzysta się go do reprogramowania pamięci SRAM w działających urządzeniach. W pierwszym podejściu można kupić stare płytki EX-314 i przeprowadzić eksperyment z ich użyciem. Biorąc jednak pod uwagę wielość wersji tych płytek dostępnych na rynku wtórnym oraz ich cenę (50 – 75 USD) uważam ten eksperyment za nieuzasadniony ekonomicznie. Pozostaje zatem wykonanie duplikatów tych płytek z aktualnie dostępnych elementów.

Projekty duplikatów płytek EX-314

Rysunki ścieżek na niektórych wersjach płytek EX-314 [10, 13] oraz schematy niektórych z nich [14] są dostępne w Internecie. Charakterystycznym jest to, że zależnie od wersji stosowane są w nich pamięci SRAM o różnych czasach dostępu. Zatem zasadniczym pytaniem jest to czy owe zmiany (od wersji do wersji) powodowały również konieczność zmian timingu ich współpracy z urządzeniami, w których były one montowane, czy też pamięci SRAM zmieniano bez ingerencji w pracę obsługujących je układów. Jedynym rozwiązaniem jest eksperymentalne sprawdzenie tej hipotezy.

Pierwsze doświadczenia przeprowadziłem z pamięciami SRAM uPD444C-1 o gwarantowanym czasie dostępu poniżej 300 ns i organizacji 4×1024. Schemat układu przedstawiono na Rys. 2, a jego zdjęcie na Fot. 3. Warto zaznaczyć, że układ ścieżek na płytce był bardzo podobny do tego, który zastosowano na fabrycznej płytce EX-314. Projekt płytki drukowanej przygotowany w programie KiCad znajduje się w załączniku „Kopia EX-314_1.zip” .

Rys. 2. Schemat kopii EX-314 dla układów uPD444C.

Następne doświadczenia prowadziłem z pamięciami SRAM uPD446C-2 i uPD446C-3 o gwarantowanych czasach dostępu odpowiednio 200 ns i 150 ns i organizacji 8×1024. Schemat układu (Rys. 3) nieco różni się od oryginalnego jak również różni się układ ścieżek na płytce drukowanej. Patrząc od strony mechanicznej elementy elektroniczne umieszczono od spodu płytki, a baterię litową od góry. Takie rozwiązanie przyjąłem aby nie tworzyć nad płytką „piramidy” elementów, która mogłaby kolidować z zasilaczem PS-35 montowanym wewnątrz mojego transceivera IC-751A. Zdjęcia tego modułu pokazano na Fot. 4. Projekt płytki drukowanej znajduje się w załączniku „Kopia EX-314_2.zip” . Warto tutaj zauważyć, że zastosowane układy SRAM są tożsame z układami LH5116.

Rys. 3. Schemat kopii EX-314 dla układów uPD446C.

 

Fot.  4. Zdjęcie kopii EX-314 dla układów uPD446C: widok od góry (po lewej), widok od spodu (po prawej).

Chociaż wszystkie powyżej pokazane kopie EX-314 działają prawidłowo w moim transceiverze IC-751A to warto podzielić się kilkoma spostrzeżeniami poczynionymi podczas ich konstruowania. Pierwszy wniosek sprowadza się do stwierdzenia, że działanie tego układu nie zależy od czasu dostępu do zastosowanych pamięci SRAM. Najbardziej „wrażliwym” jest układ załączania zapisu gdy pojawią się stany wysokie na liniach adresowych A8 i A9 (vide Rys. 1). O ile działanie samych bramek OR jest bez zarzutu to zastosowany dalej układ złożony z elementów R3, R4, C2, D3 i Q1 wymagał sporej dozy cierpliwości. Układ ten jest „wrażliwy” na sterujący go prąd tzn. jeśli jest on zbyt mały to zapis do pamięci SRAM ulega zaburzeniu. Skutkiem tego spostrzeżenia zastosowanie układów OR SN74LS32 kończyło się „niepewnością” działania zapisu. Cóż, parametr oznaczany jako  (prąd wyjściowy bramki w stanie wysokim) jest według danych katalogowych dla takich układów dwukrotnie mniejszy niż dla SN7432N. Drugim „wrażliwym” elementem jest tranzystor Q1, a właściwie jego charakterystyka związana z nieliniową zależnością prądu kolektora od prądu bazy, szczególnie dla małych wartości prądu bazy. Jego charakterystyka jest bardzo podobna do 2N3904, aczkolwiek łatwa dostępność tranzystorów C945 (2SC945) w kraju nie wymaga poszukiwania zamienników. Dioda D3 powinna być diodą przełączającą o możliwie jak najmniejszej pojemności złącza, warunek ten spełnia 1N4151 i nie ma konieczności sprowadzania diod 1S953 stosowanych w oryginalnym układzie. Reasumując to opisany układ można byłoby przeliczyć i „dopasować” do innych bramek OR tym niemniej wysiłek ten jest aktualnie niepotrzebny.

Warto jeszcze rozważyć propozycje układów EX-314, w których zamiast pamięci SRAM zamiennie można byłoby zastosować pamięci FRAM [15]. W układach takich bateria litowa byłaby zbędna. Zatem układ pozostawałby rzeczywiście „długowiecznym”.

Zastosowanie pamięci FRAM

Bardzo dobrym reprezentantem pamięci FRAM jest układ FM1608. Jeśli przejrzy się jego notę techniczną to bardzo łatwo zauważy się różnice w sekwencjach sterujących odczytem i zapisem w porównaniu do pamięci SRAM. O ile sekwencja sterująca odczytem różni się jedynie interwałami niektórych impulsów (lub ich opóźnień w stosunku do siebie) jest bardzo (ale to bardzo) podobna, o tyle sekwencja impulsów sterująca zapisem do pamięci różni się znacznie bardziej, szczególnie jeśli owe różnice uwzględnimy w narzuconym nam „schemacie” EX-314. Skoro jednak nieznany jest protokół komunikacji pomiędzy starszym urządzeniem ICOM i wbudowaną weń pamięcią SRAM to warto było przeprowadzić eksperyment tworząc układ EX-314 z taką pamięcią (vide Fot. 5).

Fot. 5. Płytka układu EX-314 z pamięcią FRAM FM1608.

Już na etapie wprowadzania kodu do pamięci EX-314 z pamięcią FRAM okazało się, że stosując sekwencje dla SRAM wpisywane nibble (4 bity) były wpisywane do komórek pamięci, których adres był o 1 większy od wskazanego. Nie jest wielkim problemem w tym programatorze jego zmuszenie do wpisywania nibble’i, w tych miejscach w których sobie życzymy. Jednak tak zaprogramowana pamięć EX-314 wprowadzona do urządzenia ICOM działała wadliwie. Po wyjęciu płytki i jej odczytaniu okazało się, że urządzenie wpisywało dane również pod adresem przesuniętym w górę o 1. Oznacza to, że tak skonstruowany układ nie ma szans na prawidłowe działanie. Szkoda, bo byłoby to znakomite rozwiązanie.

Podsumowanie

W programie wprowadzanym do procesora Arduino Uno umieściłem kilka (znalezionych w Internecie) kodów SRAM dla kilku różnych urządzeń ICOMa. Jednakże testy mogłem przeprowadzić jedynie z tymi, które odpowiadały mojemu IC-751A. Zatem, sprawdziłem, że kod oznaczony liczbą 1 (Adres zawartości RAM w IC-751 i 751A) po zapisaniu w EX-314 uruchamia transceiver na częstotliwości 14,047 MHz i pozwala używać go w pełnej zgodzie ze wszystkimi funkcjami zapisanymi w Manualu. Kod oznaczony numerem 13 (Adres zawartości RAM w IC-751 używanego w Polsce (mojego)) stanowi „zrzut” kodu zapisanego w moim transceiverze i po włączeniu transceivera uruchamia go na częstotliwości 3,715 MHz. Przy czym wszystkie pozostałe funkcje tego urządzenia działają bez zarzutu. Poprawność działania sprawdziłem korzystając z fabrycznego układu EX-314 jak również z jego kopii z Rys. 1 i 2. Pozostałych kodów, wobec ich znaczącej różnicy z powyższymi, nie sprawdzałem.

Kod oznaczony numerem 1 został pobrany z programu opisanego na stronie internetowej [8] i nie był on testowany przez autorów. Natomiast z sukcesem był testowany kod przeznaczony dla bliżej niesprecyzowanego odbiornika IC-R71. Podobnie z sukcesem został zaprogramowany SRAM w IC-751 za pomocą kodu dostępnego w programie ze strony [16]. Jak widać mamy stosunkowo duży wybór „wsadów” do różnych starszych urządzeń ICOMa, a to oznacza, że nawet wobec całkowitego rozładowania się baterii litowej istnieje bardzo wysokie prawdopodobieństwo reanimacji „zdechłego” urządzenia.  Jednak aby to uczynić potrzebny jest programator taki jak wyżej opisany.

Literatura

  1. https://www.youtube.com/watch?v=ZnG_oaUn5K0
  2. https://www.piexx.com/index.php?main_page=product_info&cPath=8&products_id=26
  3. https://www.qsl.net/ah6rh/am-radio/ik2rnd-icom-ramboard.html
  4. https://www.youtube.com/watch?v=XiqG6cXv1H0
  5. https://sp5qwj.blogspot.com/2017/08/ham-radio-shack.html
  6. https://www.ab4oj.com/icom/w9gb.html
  7. https://www.scribd.com/document/362094351/ICOM-EX-314-Memory-Board-Battery-Replacement-Instuctions
  8. https://github.com/bkbbk/ex314-programmer
  9. https://www.reddit.com/r/amateurradio/comments/7nyruf/bringing_the_icom_ex314_ram_boards_back_to_life/
  10. https://www.qrz.ru/schemes/contribute/technology/icom751/english.shtml
  11. https://www.eevblog.com/forum/rf-microwave/programming-volatile-memory-boards-in-older-icom-rigs/25/
  12. https://www.microchip.com/en-us/tools-resources/develop/microchip-studio#Downloads
  13. https://www.rigpix.com/accessories/icom_ex314_battery-replacement.pdf
  14. https://www.eevblog.com/forum/rf-microwave/programming-volatile-memory-boards-in-older-icom-rigs/50/
  15. https://www.eevblog.com/forum/rf-microwave/programming-volatile-memory-boards-in-older-icom-rigs/200/
  16. https://github.com/b-staton/Arduino_Icom_Ram_programmer

Jacek Michalski, SP5IMO & ex WX3V

Liczba komentarzy: 6

  • Hello, are you sure you have the schematic for the ICOM card with UPD444 memory and 7432 ?
    The clone you’re suggesting doesn’t work.

    Odpowiedz
    • I copied the EX-314 diagram exactly from the original ICOM boards. For this purpose, I checked the boards with the uPD444C and uPD446C chips. I made and tested all types of chips with extensions from C to C-2. They all work correctly. So I have no doubts that they are OK. What’s more, all of these boards work correctly in my IC-751A after programming. They also work correctly in the IC-1271.

      I don’t know what programmer you are using. Write something about it because the error may result from incorrect programming of these boards. The most important thing is to use 7432 chips on these boards, not 74LS32, 74S32, 74HC32 or 74HCT32. These newer chips have a lower short-circuit current and do not keep up with switching from read to write mode.

      First, check that all the paths of the printed circuit have no breaks.

      Odpowiedz
  • I ordered the PCBs from JLCPCB. All the ones I have ordered have never been faulty. Of course, I used genuine 7432s, as I’m well aware of the incompatibilities between the various technologies. On the other hand, I used a programmer of my own design based on an Arduino UNO. It works perfectly with the original board and with RAM memories connected directly. Even 2116s can be written and read without any problem (provided you don’t cut the 5V, of course!).

    Odpowiedz
    • I think I know what’s causing your EX-314 not to work properly (it’s about the uPD444C board). Namely, on the board design, the Q1 transistor leads are located in the same way as for the EBC footprint. So, by soldering the transistor according to the „view of its housing”, you unintentionally swapped the base with the collector of the 2SC945 transistor, whose leads are ECB. If you swap these leads, the board should start working properly. Take a look at the datasheet of this transistor and solder the leads according to the information provided there.
      Incorrect soldering of the transistor should not damage it, so you can use the same (desoldered) transistor.
      Let me know if this change had a positive effect.
      Best regards.
      Jacek, SP5IMO & ex WX3V

      Odpowiedz
  • If your programmer works correctly with original EX-314 boards, it must also work correctly with those described in the article. In terms of the electrical diagram, the designed board is identical to the original board manufactured by ICOM – I can guarantee this because I prepared the diagrams of all the boards by measuring the connections in the original ICOM boards and checking the diagram with drawings of these boards available on the Internet.

    I encourage you to check the connections on your PCB, as well as the assembly of the components. First of all, check whether all the integrated circuits have leads with the number 1 in the places where they should have them. A possible error may also occur when assembling the 2SC945 transistor. Its pinout is different from the „standard” EBC.

    Also check whether after entering the code you know to 2114, you will read the same code with the programmer. Unfortunately, the timing of the EX-314 board is slightly different from the timing of the 2114 chip itself.
    If you have a design of your board made in some EDA program, send screenshots of the schematic and the printed path layer. My email address is SP5IMO@vp.pl.
    I am sure that we will find the reason why your boards do not work.

    Odpowiedz

Odpowiedz Bruno Anuluj odpowiedź

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *