Sabtu, 29 Juni 2013

Unlock TV China (ICHICKO 21”) Menggunakan Mikrokontroller


Mungkin judul posting ini kurang sesuai tapi binggung mau ngasih judul apa Cuma pengin berbagi pengalaman aja.
Beberapa waktu yang lalu dapat sms gini :

081327XX... : “Mas, bisa benerin TV China ga?”
Me  :”Ni siapa?dari mana? Merk nya pa?permasalahanya knp?”
081327XX... : “mr A, dari ds B. ICHICKO 21 inci, nyala Cuma biru ada tulisan LOCK”

Deket rumah mr 081327xx ada tukang servis TV jadi ga enak, sedikit males juga.

Me  : “Ouw, itu ke progrm nya ke kunci mas, ke mas Z ja pasti bisa.”
081327XX... : “udah mas, remot ilang jd mas Z ga sanggp.”
Me  : “ya dah nanti tek coba.”

Demikian awal mula kejadianya...
Dari sms yang saya terima dapat kesimpulan masalah pada EEPROM, dan remot TV ga ada sehingga susah buat unlock pake remot universal, lagi pula sejatinya saya bukan tukang servis TV jadi ga hafal kode servis TV yang begitu banyak merknya.

So, langsung saja persiapan amunisi...

Yang pertama disiapkan adalah EEPROM buat ganti yang lama. Untuk TV jaman sekarang kebanyakan menggunakan EEPROM seri 24Cxx dan 28Cxx sedangkan untuk TV China sendiri terkadang menggunakan EEPROM yang seri depanya susah dihafal akan tetapi dari serangkaian angka dan huruf yang terlihat acak biasanya ada kode xx24xx atau xx28xx yang menandakan bahwa dia kompatibel dengan seri 24Cxx atau 28Cxx. Perbedaan dua EEPROM tersebut adalah pada protokol komunikasinya. Untuk seri 24Cxx komunikasinya menggunakan I2C (serial) sedangkan seri 28Cxx secara paralel.

Sedangkan simbol xx dibelakang seri 24C atau 28C merupakan kode kapasitas memori EEPROM, biasanya 02(2 Kb), 04 (4 Kb), 08(8 Kb), 16(16 Kb) dst.
Obrak – abrik kotak komponen, toples isi komponen dan box – box harta karun yang tersembunyi diberbagai sudut kamar cuma menemukan EEPROM seri 24C dan kapasitas yang ada 4Kb,8Kb dan 16Kb dan saya rasa itu cukup karena kebanyakan TV menggunakan EEPROM tersebut.

Amunisi kedua adalah alat buat menulis data ke EEPROM. Dan ternyata saya baru sadar bahwa saya nggak punya alat buat baca tulis EEPROM, selama ini sering melihat diinternet tapi ga tertarik buat bikin.

Sedikit punya pengetahuan tentang mikrokontroler, harusnya hal tersebut ga jadi masalah.....Obrak – abrik harta karun lagi dan ha..ha...ternyata saya punya sismin mega8 yang sudah tersedia RTC menggunakan DS1307. Loh...Kok...!! masalah yang akan dihadapi kan EEPROM, apa hubunganya dengan DS1307.
Yah, masalah memang EEPROM tapi kenapa saya gembira, karena DS1307 yang biasa saya pake adalah tipe DIP8 dan menggunakan soket IC DIP8. Antara EEPROM 24Cxx dengan DS1307 sama – sama IC DIP8 dan transfer data menggunakan  I2C (SDA dan SCL) serta keduanya memiliki pin SDA dan SCL pada nomor kaki yang sama begitu juga dengan pin Vcc dan GND. Jadi tinggal melepas IC DS1307 dari soketnya dan mengganti dengan EEPROM 24Cxx yang akan diproses.... masalah terselesaikan....

Selanjutnya tinggal menyiapkan program baca tulis EEPROM. Langsung aja buka kompi dan run CVAVR ketik program dan compile.....run juga ISIS proteus dan buat skematik uji coba.
Berikut program yang saya buat menggunakan CVAVR.

/*****************************************************/ 
#include "mega8.h"
#include "stdio.h"
#include "i2c.h"
#include "delay.h"
#define EEPROM_BUS_ADDRESS 0xa0

unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

void eeprom_write(unsigned char address, unsigned char data) {
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();
delay_ms(10);
}

void main(void)
{
i2c_init();

while (1)
      {  
      unsigned char input;  
      int alamat;
      int data;   
      unsigned char buff[256]={ 
                  0    ,10  ,112 ,176 ,0   ,1   ,0    ,255 ,255 ,5   ,0   ,255 ,255 ,255 ,255   
                  ,255 ,255 ,1   ,5   ,51  ,50  ,51   ,50  ,0   ,11  ,70  ,70  ,50  ,    ,17    
                  ,230 ,128 ,171 ,193 ,64  ,80  ,117  ,69  ,64  ,64  ,21  ,64  ,7   ,9   ,80
                  ,0   ,53  ,37  ,63  ,0   ,40  ,40   ,40  ,40  ,40  ,40  ,40  ,7   ,56  ,21
                  ,16  ,31  ,55  ,51  ,11  ,75  ,75   ,75  ,1   ,0   ,24  ,9   ,2   ,47  ,5
                  ,1   ,3   ,9   ,8   ,255 ,2   ,8    ,8   ,0   ,34  ,9   ,48  ,64  ,80  ,0
                  ,0   ,82  ,4   ,5   ,0   ,0   ,0    ,48  ,0   ,0   ,0   ,5   ,32  ,32  ,16
                  ,16  ,16  ,36  ,0   ,46  ,24  ,34   ,30  ,0   ,0   ,0   ,0   ,0   ,1   ,6
                  ,188 ,47  ,161 ,2   ,4   ,175 ,255  ,119 ,83  ,20  ,0   ,55  ,33  ,101 ,101
                  ,181 ,234 ,213 ,19  ,0   ,64  ,114  ,64  ,63  ,37  ,0   ,0   ,0   ,255 ,255
                  ,255 ,255 ,255 ,255 ,255 ,255 ,255  ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
                  ,255 ,255 ,255 ,255 ,255 ,255 ,255  ,255 ,255 ,255 ,255 ,255 ,255 ,224 ,255
                  ,255 ,255 ,255 ,255 ,255 ,255 ,255  ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
                  ,255 ,255 ,255 ,255 ,255 ,255 ,255  ,255 ,255 ,255 ,255 ,255 ,255 ,255 ,255
                  ,255 ,255 ,255 ,255 ,255 ,255 ,255  ,255 ,255 ,255 ,16  ,158 ,128 ,164 ,160
                  ,128 ,254 ,164 ,128 ,199 ,166 ,128  ,95  ,168 ,128 ,99  ,168 ,128 ,57  ,155
                  ,128 ,99  ,168 ,128 ,57  ,155 ,128  ,46  ,155 ,128 ,115 ,172 ,128 ,207 ,169    
                  ,128}; 
    
       home:
       printf("======= EEPROM Reader V.1 ========%c",0x0d);             
       printf("-24c02 Masukan [a]%c",0x0d);  
       printf("-24c04 Masukan [b]%c",0x0d);
       printf("-24c08 Masukan [c]%c",0x0d);
       printf("-24c16 Masukan [d]%c",0x0d);  
       printf("-Tulis EEPROM  [e]%c",0x0d);
       delay_ms(1000);
       input=getchar();
       while(input==''){
       }
       if(input=='a'){
       goto c02;
       }
       else if(input=='b'){
       goto c04;
       }
       else if(input=='c'){
       goto c08;
       }
       else if(input=='d'){
       goto c16;
       }
       else if(input=='e'){
       goto Tulis;
       }  
       //======baca EEPROM 24c02 cetak ke terminal =========//
       c02:
       for(alamat = 0x00 ; alamat <= 0xff;alamat++){
        data=eeprom_read(alamat);
        printf("%d  %d  %c",alamat,data,0x0D);
        delay_ms(10);
        }
        goto home;   
       
       //======baca EEPROM 24c04 cetak ke terminal =========//
       c04:
       for(alamat = 0x00 ; alamat <= 0x1ff;alamat++){
        data=eeprom_read(alamat);
        printf("%d  %d  %c",alamat,data,0x0D);
        delay_ms(10);
        }   
        goto home;
       
       //======baca EEPROM 24c08 cetak ke terminal =========//
       c08:
       for(alamat = 0x00 ; alamat <= 0x3ff;alamat++){
        data=eeprom_read(alamat);
        printf("%d  %d  %c",alamat,data,0x0D);
        delay_ms(10);
        }
        goto home;
       
       //======baca EEPROM 24c16 cetak ke terminal =========//
       c16:
       for(alamat = 0x00 ; alamat <= 0x7ff;alamat++){
        data=eeprom_read(alamat);
        printf("%d  %d  %c",alamat,data,0x0D);
        delay_ms(10);
        } 
        goto home; 
        //======Tulis EEPROM sebanyak 256 Byte ===========//
        Tulis:
        for(alamat = 0x00;alamat <=0xff;alamat++){       
            eeprom_write(alamat,buff[alamat]);
            delay_ms(100);                    
            printf("Add:%d -> %d %c",alamat,buff[alamat],0x0d);
        } 
        for(alamat = 0x00;alamat <=0xff;alamat++){    //verifikasi nilai yang ditulis
            data = eeprom_read(alamat); 
            delay_ms(50);
            if(data==buff[alamat]){
                printf("Add:%d -> OK %c",alamat,0x0d);  
                }
            else{
                printf("Data @ %d Corrupt%c",alamat,0x0d);
                } 
        }
        goto home;
      } 
}
/*****************************************************/

Skematik di ISIS yang saya gunakan seperti gambar dibawah.

Setelah simulasi OK dan program di download ke mikrokontroler maka siap berangkat.....
(PD banget mas ...emang tau kode lock di alamat berapa? Dan unlocknya nilainya berapa?).....Sejauh ini tinggal mengandalkan insting engineer dan kehendak Allah Yang Maha Kuasa.
Sampai dilokasi ternyata sudah ditunggu sama yang punya rumah. Berikut sedikit obrolan yang mampu saya ingat..(terjemahan dari bahasa sehari – hari saya)

Mr 081327xx : Wah, hampir saja saya jemput mas..., Apa lagi banyak proyek mas?
Me   : hehe...Jalan macet mas...(haha...ga masuk akal......)
Mr 081327xx : Punya remotnya pa mas?
Me   : Ga, mau tek coba oprek IC memori programnya dulu mas.(Orang desa kalo disebutin EEPROM bisa pesen antasid takut sakit perut)
Mr 081327xx : Ouo.....ya monggo.....!!!(*_!)

Pertama saya nyalakan TV dan terlihat nyala TV biru dan ada tulisan LOCK ditengah layar. Saya coba pencet – pencet tombol yang ada di TV dan tidak ada respon apapun pada TV.
Langsung saja buka cashing TV dan Alkhamdulillah ternyata saya direstui oleh Allah SWT karena tipe EEPROM yang dipake TV ini 24C16 sehingga sesuai dengan yang saya bawa dari rumah dan TV yang ini menggunakan kontroler yang mengijinkan user menggunakan EEPROM kosong. Sekedar info beberapa merk TV china dapat dijalankan menggunakan EEPROM kosong jadi ketika pertama kali dihidupkan, kontroler akan mentransfer data (parameter dasar) ke EEPROM yang kosong tadi (seperti factory reset). Jadi langsung saja saya lepas EEPROMnya dan saya pasang dengan EEPROM kosong berikut soketnya yang saya bawa dari rumah.

Kemudian saya nyalakan TV setelah menunggu beberapa saat pada layar TV tampak biru dan keluar display nomor chanel akan tetapi tampilan layar tidak penuh. Kemudian mencoba pencet – pencet tombol di TV ternyata berfungsi semua, hanya layar TV masih tampak biru. Ini menandakan bahwa program TV sudah tidak terkunci, tinggal melakukan tuning untuk mencoba apakah TV bekerja normal atau tidak. Ketika memencet menu sedikit kaget karena bahasa dan tulisan yang digunakan menggunakan bahasa dan tulisan china. Hmm .. yang punya rumah malah ketawa liat tulisan kaya cacing...

Setelah otak - atik sebentar akhirnya ketemu juga tulisan ENGLISH dan *blink*...penampakan pada menu menjadi tulisan yang dapat saya baca. Langsung saja saya jalankan ASM (kayaknya sih singkatan dari Auto Search Mode) dan TV melakukan proses tuning dari VHF-L hingga UHF.

Sambil menunggu proses search pada TV saya nyalakan laptop dan memaasang EEPROM TV yang asli bawaan TV tersebut ke sismin mikro. Setelah laptop menyala saya hubungkan mikro ke laptop menggunakan USB to Serial dan menjalankan software terminal. Comment yang punya rumah “ Jaman sekarang apa – apa pake komputer ya mas” dan saya jawab dengan basa - basi ala sales perabot dapur.
Info : saya menggunakan software terminal buatan sendiri yang dapat menyimapan data yang diterima komputer dalam format xls(MS.Excel). Apabila menggunakan terminal yang lain maka perlu dilakukan pengkopian data dari terminal untuk analisa. Setelah terminal jalan seting Port dan Baudrate sesuai tinggal ketik ‘d’ dan mikro akan mengirimkan data dari alamat 0 s/d 2047 setelah semua selesai mikro saya matikan dan EEPROM dilepas.

Ternyata TV sudah selesai melakukan searching dan beberapa kejanggalan yang ada diantaranya adalah tampilan layar tidak penuh serta suara tidak keluar. Lalu TV saya matikan dan cabut EEPRO kemudian melakukan pembacaan seperti pada langkah sebelumnya. Kemudian hasil pembacaan saya bandingkan, ada banyak data yang sama dan banyak juga data yang berbeda.

Setelah diamati, ternyata data pada EEPROM baik yang baru maupun yang lama nilainya sama untuk tiap 256 alamat. Sebagai contoh nilai pada alamat 0 sama dengan nilai pada alamat 256, 512,768,1024,1280,1536,1792. Ini sedikit membuat tanda tanya apakah dari 2048 Byte kapasitas EEPROM yang digunakan hanya 256 Byte saja atau kemungkinan lain saya tidak tau. Akan tetapi ini sedikit menguntungkan karena yang dianalisa hanya 256 Byte data saja.  Dan 256 angka yang yang nilainya acak jauh lebih enak dipandang daripada 2048 angka yang nilainya acak.

Untuk mengembalikan TV pada kondisi normal maka perlu diputuskan data mana yang akan digunakan. Kedua data EEPROM memiliki cacat yaitu pada EEPROM lama terdapat data LOCK pada salah satu byte-nya, sedangkan pada EEPROM baru data lebar layar dan parameter – parameter setingan suara tidak ada. Jelas data pada EEPROM baru memiliki cacat yang lebih banyak, akan tetapi data buat Unlock program ada pada EEPROM baru. Jadi kesimpulanya adalah memilih data unlock program pada data EEPROM baru dan menyalinya ke data pada EEPROM lama sesuai dengan alamat penyimpanan pada EEPROM baru.

Permasalahan yang muncul adalah dari 256 data, mana yang berfungsi buat unlock program?
Mungkin anda juga akan berpikiran yang sama seperti saya dalam mengambil keputusan tentang pemilihan data yang tepat. Seperti permainan kata berkait mulai dengan kata LOCK

Lock berhubungan dengan Kunci à pintu à rumah à rumah memiliki pintu didepan, jadi data dialamat lebih awal yang berbeda memiliki kemungkinan lebih besar sebagai data unlock.

Data pada alamat ke-3 pada EEPROM lama dan EEPROM baru memiliki nilai yang berbeda. Pada EEPROM lama nilainya 164 sedangkan pada EEPROM baru nilainya 176. Sehingga saya merubah nilai alamat ke-3 pada EEPROM lama dengan nilai 176 kemudian menyalin semua data EEPROM lama yang telah dimodifikasi pada alamat ke-3 kedalam variabel buff[256] pada program. Jika sebelumnya anda bertanya – tanya dari mana asal nilai variabel buff[256] pada program diatas, maka sekarang anda dapat menyimpulkan sendiri.

Setelah program dicompile dan didownload ulang ke mikrokontroler tinggal menjalankan mikrokontroler  bersama software terminal dengan EEPROM baru yang masih terpasang pada sismin. Kemudian mengetik ‘e’ pada terminal dan setelah proses selesai, mikro dimatikan dan EEPROM dipindahkan ke TV.
Kemudian saya nyalakan TV dan hasilnya ....*_* ...Horre...

TV menyala dengan normal...layar penuh dan suara terdengar jelas tinggal pasang chasing, menyalakan rokok dan cas cis cus sedikit dan terakhir mengucapkan TERIMA KASIH....

Tidak ada komentar:

Posting Komentar