Объявление

Свернуть
Пока нет объявлений.

TP-LINK TL-WDN3200 чип RT5572 переключить на внешнюю EEPROM.

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

    #16
    Сообщение от unicorp99 Посмотреть сообщение
    Вставляем после каждой команды while ещё одну команду присвоения типа Первая переменная = 1, потом 2, потом 3, потом 4
    Запускаем на живом чипе - контролируем уверенный приём команды 3
    Немного отложим тесты, пока есть не решённая проблема о ней ниже.

    Сообщение от unicorp99 Посмотреть сообщение
    Афигеть, что в Ташкенте понятна ненужность переменной "флак", в руки, барабан на шею и т.д.
    Второе -
    А что вас собственно смущает в переменной флаг? :) Первый вариант был на циклах ожидание уровней, а потом я подумал он же в циклах ничего не делает тупо ждёт, ну и решил реагировать только на сам факт изменения состояния с 0 на 1 а чтобы увидеть изменение состояние предыдущее нужно запомнить собственно для этого и флаг.

    Теперь по делу. Возникла проблема при чтении адреса. Почемуто старший байт адреса всегда читается как FE, первый байт опкод 03 всегда читается верно и верно читается младший байт адреса. К примеру попытавшись считать по адресу 208 (там VID находится) получаю следующий запрос от чипа 03 FE 08, склонен считать что проблема не в программе (гонял её и на симуляторе и в дебагере и в программаторе), а сам чип действительно шлёт FE. Читаю по 20A (PID) получаю запрос 03 FE 0A, при включении свистка получаю 03 FE 00. Какие идеи?

    Комментарий


      #17
      delete

      Комментарий


        #18
        Сообщение от Nestik Посмотреть сообщение
        Немного отложим тесты, пока есть не решённая проблема о ней ниже.
        Теперь по делу. Возникла проблема при чтении адреса. Почемуто старший байт адреса всегда читается как FE, первый байт опкод 03 всегда читается верно и верно читается младший байт адреса. К примеру попытавшись считать по адресу 208 (там VID находится) получаю следующий запрос от чипа 03 FE 08, склонен считать что проблема не в программе, а сам чип действительно шлёт FE. Читаю по 20A (PID) получаю запрос 03 FE 0A, при вклёчении свистка получаю 03 FE 00. Какие идеи?
        Варианты:
        1. странная потеря приёма данных из-за скорости. используются подпрограммы на C, 10-15 лишних тактов и потеря.. (маловероятно, так как следующий байт читается трижды верно)
        2. чип 25C080 округляет старший FE до 2 - делает что-то типа & 3 и иму пофек на пчёл.
        3. четается не адрис, а айди ID.. версию микросхемы им на блюде падавай..

        А тесты нужно сделать обязательно - без ниха нипанятно, хде срыв и есть ли запас?
        Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
        Предупреждение: По всем коммерческим вопросам - только личка

        Комментарий


          #19
          Сообщение от unicorp99 Посмотреть сообщение
          Варианты:
          1. странная потеря приёма данных из-за скорости. используются подпрограммы на C, 10-15 лишних тактов и потеря.. (маловероятно, так как следующий байт читается трижды верно)
          Всё верно отпадает, младший принимается верно, кроме того линяя должна быть в нуле, даже если срыв синхронизации по CLK то единицам взяться неоткуда было бы.

          Сообщение от unicorp99 Посмотреть сообщение
          2. чип 25C080 округляет старший FE до 2 - делает что-то типа & 3 и иму пофек на пчёл.
          Тоже отпадает, при старте передаётся FE 00, а должнобыть тогда FD 00. так как считывание с 00 00 т.е. байт не меняется. И в даташитах нет ничего про округление.

          Сообщение от unicorp99 Посмотреть сообщение
          3. четается не адрис, а айди ID.. версию микросхемы им на блюде падавай..
          стандартная команда для считывания ИД это 9F, 03 это чтение памяти везде в любых SPI EPPROM стандарт так сказать.

          Возможно это просто первая попытка чтения из памяти по таким адресам идёт, типа определить размер памяти? Я ловлю для блинка(светика) только первые 3 байта. Вообще тоже отпадает при чтении конкретного адреса происходит всего одна попытка.

          Короче досадно как то.

          Комментарий


            #20
            Сообщение от unicorp99 Посмотреть сообщение
            Варианты:
            2. чип 25C080 округляет старший FE до 2 - делает что-то типа & 3 и иму пофек на пчёл.
            Кажись вы правы. Память не смотрит на эти старшие биты а RT5572 вместо их обнуления делает их единицами. Расширил приём на блинк до 10 байт. Там действительно фигурируют страшие байты такие как FE = 02 FC = 00. Как раз те области где располагаются данные. Видимо он начинает читать не с 00 а с 0200 поэтому ввело в заблуждение FE00.

            Идём дальше. Теперь write. :)

            Комментарий


              #21
              Театр 2-х актёров,
              а фсе остальные стоят в сторонке и нервно курят.))))

              Комментарий


                #22
                Таки заработало!!! :)

                unicorp99, насчёт битовых структур вы были не правы они гораздо быстрее работают чем ваша конструкция.

                Дизасм вывода из битовой структуры.

                Код:
                ;at25080_emulate.c,267 :: 		SoftSpi_SDO = outbuf_s.bits.b1;
                0x0500	0xB204      	BTFSC       R4, 1 
                0x0502	0xD002      	BRA         L__read_spi230
                0x0504	0x9682      	BCF         RC3_bit, BitPos(RC3_bit+0) 
                0x0506	0xD001      	BRA         L__read_spi231
                L__read_spi230:
                0x0508	0x8682      	BSF         RC3_bit, BitPos(RC3_bit+0)
                В итоге write заработал такой:
                Код:
                         while (Chip_Select == 0) {
                            //if(addr_h+count > 0x03FF) count = 0;
                            outbuf_s.Byte = eeprom_data[addr_h];
                            
                            SoftSpi_SDO = outbuf_s.bits.b7;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b6;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b5;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b4;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b3;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b2;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b1;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            SoftSpi_SDO = outbuf_s.bits.b0;
                            while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            addr_h++;
                            while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                
                         }
                Позже выложу все материалы, полные исходники, скомпиленный хекс, может кому то пригодится.

                unicorp99, Вам огромное спасибо за участие! Благодарствую.

                Комментарий


                  #23
                  Сообщение от Nestik Посмотреть сообщение
                  Таки заработало!!! :)

                  unicorp99, насчёт битовых структур вы были не правы они гораздо быстрее работают чем ваша конструкция.

                  Дизасм вывода из битовой структуры.

                  Код:
                  ;at25080_emulate.c,267 :: 		SoftSpi_SDO = outbuf_s.bits.b1;
                  0x0500	0xB204      	BTFSC       R4, 1 
                  0x0502	0xD002      	BRA         L__read_spi230
                  0x0504	0x9682      	BCF         RC3_bit, BitPos(RC3_bit+0) 
                  0x0506	0xD001      	BRA         L__read_spi231
                  L__read_spi230:
                  0x0508	0x8682      	BSF         RC3_bit, BitPos(RC3_bit+0)
                  В итоге write заработал такой:
                  Код:
                           while (Chip_Select == 0) {
                              //if(addr_h+count > 0x03FF) count = 0;
                              outbuf_s.Byte = eeprom_data[addr_h];
                              
                              SoftSpi_SDO = outbuf_s.bits.b7;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b6;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b5;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b4;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b3;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b2;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b1;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                              SoftSpi_SDO = outbuf_s.bits.b0;
                              while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                              addr_h++;
                              while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                  
                           }
                  Позже выложу все материалы, полные исходники, скомпиленный хекс, может кому то пригодится.

                  unicorp99, Вам огромное спасибо за участие! Благодарствую.
                  Очень рад, что получилось, нужно оформить статью как "эмуляция SPI на PIC18". Ускорение эмуляции с 100KHz до 2 MHz
                  так как частотомером или осциллографом оценка скорости не проведена,
                  также граничная оценка запаса в программе тоже, то это нужно указать.

                  "эмуляция SPI на PIC18". Ускорение эмуляции с 100KHz до скорости опроса 2 MHz.
                  пошаговый разбор потери скорости.

                  Важно приложить исходники, сам компилятор и дизассемблер. Кто будет мучить - чтобы не с нуля всё искать..

                  Emulation SPI serial peripheral interface on PIC microchip with C code, some disasm listing and teoretical basics.

                  Что, по вашему мнению, сир, стало решающим провалом для оригинального текста, хде провал скорости?

                  Emulation SPI serial peripheral interface on PIC microchip with C code, some disasm listing and teoretical basics. - дабл для паисковикоф

                  Сообщение от Yuraner Посмотреть сообщение
                  Театр 2-х актёров,
                  а фсе остальные стоят в сторонке и нервно курят.))))
                  Цирковые выступления начинаются в теме: http://www.lan23.ru/forum/showthread.php?t=11498
                  Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
                  Предупреждение: По всем коммерческим вопросам - только личка

                  Комментарий


                    #24
                    Как и обещал весь материал. В форме статьи оформлять не буду.

                    1. Компилятор Micro C, бесплатная версия, код до 2 Кб, подходит. Качается тут.

                    2. Контроллер PIC18F25K20.

                    3. Исходный код:
                    Код:
                    sbit Chip_Select at RB7_bit;
                    sbit SoftSpi_CLK at RB6_bit;
                    sbit SoftSpi_SDI at RB5_bit;
                    sbit SoftSpi_SDO at RC3_bit;
                    //sbit LED1 at RC4_bit;  //debug
                    
                    sbit Chip_Select_Direction at TRISB7_bit;
                    sbit SoftSpi_CLK_Direction at TRISB6_bit;
                    sbit SoftSpi_SDI_Direction at TRISB5_bit;
                    sbit SoftSpi_SDO_Direction at TRISC3_bit;
                    //sbit LED1_Direction at TRISC4_bit;  //debug
                    
                    //unsigned char byte_count=0; //debug
                    //unsigned int addresses[10]; //debug
                    //unsigned char op_codes[10]; //debug
                    
                    const unsigned char eeprom_data [1024] =
                    {
                     0x72,0x55,0x03,0x01,0x64,0x70,0x02,0x0b,0x8f,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0x00,0x00,0x00,0x00,0x22,0xff,0x80,0x00,0x00,0x01,0x27,0x01,0x55,0x55,0x99,0xbb,
                     0xff,0x08,0xff,0xff,0x08,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0xff,0xff,
                     0x00,0x81,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x05,
                     0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x08,0x72,0x44,
                     0x0f,0x00,0x10,0x31,0x0f,0x00,0x72,0xe8,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
                     0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,
                     0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0d,
                     0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,
                     0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0x00,0x00,0x00,0x00,0x20,0x53,0x34,0x0f,0x11,0x44,0x0f,0x00,0x82,0xec,0x66,0x66,
                     0xaa,0xaa,0x88,0x66,0xaa,0xaa,0x88,0x66,0xaa,0xaa,0x88,0x66,0xeb,0xaa,0x88,0x66,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xef,0xff,0xff,
                     0xff,0xff,0xff,0xff,0x01,0x05,0xff,0xff,0x01,0x04,0x01,0x01,0xff,0xff,0x60,0x02,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,0x8f,0x14,0x72,0x35,0x01,0x01,0x01,0x02,
                     0x03,0x01,0x0a,0x06,0x00,0x02,0x00,0x00,0x00,0x40,0x01,0x00,0x09,0x02,0x35,0x00,
                     0x01,0x01,0x00,0x80,0xe1,0x09,0x04,0x00,0x00,0x05,0xff,0xff,0xff,0x05,0x07,0x05,
                     0x81,0x02,0x00,0x02,0x00,0x07,0x05,0x01,0x02,0x00,0x02,0x00,0x07,0x05,0x02,0x02,
                     0x00,0x02,0x00,0x07,0x05,0x03,0x02,0x00,0x02,0x00,0x07,0x05,0x04,0x02,0x00,0x02,
                     0x00,0x07,0x05,0x05,0x02,0x00,0x02,0x00,0x07,0x05,0x06,0x02,0x00,0x02,0x00,0x00,
                     0x52,0x61,0x6c,0x69,0x6e,0x6b,0x20,0x20,0x57,0x69,0x72,0x65,0x6c,0x65,0x73,0x73,
                     0x20,0x31,0x31,0x6e,0x20,0x20,0x20,0x20,0x31,0x2e,0x30,0x30,0x00,0x00,0x00,0x00,
                     0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,0x8f,0x14,0x72,0x55,0x01,0x00,0x06,0x07,
                     0x08,0x01,0x0a,0x06,0x00,0x02,0x00,0x00,0x00,0x40,0x01,0x00,0x09,0x02,0x20,0x00,
                     0x01,0x01,0x00,0x80,0xe1,0x09,0x04,0x00,0x00,0x02,0x08,0x06,0x50,0x0a,0x07,0x05,
                     0x81,0x02,0x00,0x02,0x00,0x07,0x05,0x01,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x60,0x70,0xa2,0xff,0xa2,0x60,0x70,0xa2,0xff,0xa2,0xff,0xff,0xff,0xff,0xff,
                     0x04,0x03,0x09,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x0e,0x03,0x52,0x00,0x61,0x00,0x6c,0x00,0x69,0x00,0x6e,0x00,0x6b,0x00,0x00,0x00,
                     0x1e,0x03,0x38,0x00,0x30,0x00,0x32,0x00,0x2e,0x00,0x31,0x00,0x31,0x00,0x20,0x00,
                     0x6e,0x00,0x20,0x00,0x57,0x00,0x4c,0x00,0x41,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,
                     0x04,0x03,0x09,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0x00,0x00,0x08,0x03,0x31,0x00,0x2e,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                     0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
                     };
                    
                    //debug function
                    /*
                    void Blink (unsigned char inbyte) {
                       unsigned char n;
                       unsigned char l_byte = 0x00;
                       unsigned char h_byte = 0x00;
                    
                       l_byte = inbyte & 0b00001111;
                       h_byte = inbyte >> 4;
                    
                       for (n = 0; n < h_byte; n++) {
                          LED1 = 1;
                          Delay_ms(1000);
                          LED1 = 0;
                          Delay_ms(500);
                       }
                    
                       for (n = 0; n < 30; n++) {
                          LED1 = 1;
                          Delay_ms(100);
                          LED1 = 0;
                          Delay_ms(100);
                       }
                    
                       for (n = 0; n < l_byte; n++) {
                          LED1 = 1;
                          Delay_ms(1000);
                          LED1 = 0;
                          Delay_ms(500);
                       }
                    }
                    */
                    
                    void InitMain() {
                    
                      Chip_Select_Direction = 1;             // Set CS# pin as input
                      SoftSpi_CLK_Direction = 1;             // Set CLK as Input
                      SoftSpi_SDI_Direction = 1;             // Set Data In as input
                      SoftSpi_SDO_Direction = 0;             // Set Data out as input begin far so output
                      //LED1_Direction = 0;                    //debug
                    
                    }
                    
                    void read_spi (){
                          unsigned char op_code;
                          unsigned int addr_h;
                          unsigned char i;
                          union {
                            struct {
                               unsigned b0:1;
                               unsigned b1:1;
                               unsigned b2:1;
                               unsigned b3:1;
                               unsigned b4:1;
                               unsigned b5:1;
                               unsigned b6:1;
                               unsigned b7:1;
                            } bits;
                           unsigned char Byte;
                          } outbuf_s;
                          
                          op_code = 0;
                          addr_h = 0;
                          
                          while (1) {
                             while (Chip_Select == 1) {}
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             op_code = op_code << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             op_code = op_code | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             
                             if (op_code != 3) return;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                             addr_h = addr_h << 1;
                             while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                             addr_h = addr_h | SoftSpi_SDI;
                             addr_h = addr_h & 0x03FF;
                             
                             while (Chip_Select == 0) {
                                outbuf_s.Byte = eeprom_data[addr_h];
                                SoftSpi_SDO = outbuf_s.bits.b7;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b6;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b5;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b4;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b3;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b2;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b1;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                SoftSpi_SDO = outbuf_s.bits.b0;
                                while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                addr_h++;
                                if(addr_h > 0x03FF) addr_h = 0;
                                while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                    
                             }
                             //op_codes[byte_count] = op_code;  //debug
                             //addresses[byte_count] = addr_h;   //debug
                             //byte_count++;  //debug
                             return;
                    
                        }
                    
                    }
                    
                    void main() {
                    
                        OSCCON.IRCF0=1; //Set 16 Mhz internal RC
                        OSCCON.IRCF1=1; //Set 16 Mhz internal RC
                        OSCCON.IRCF2=1; //Set 16 Mhz internal RC
                        PLLEN_bit = 1;  //Enable PLL internal RC * 4
                        ANSEL = 0x00;   //Set all pin as digital
                        ANSELH = 0x00;  //Set all pin as digital
                        CM1CON0 = 0;
                        CM2CON0 = 0;
                        InitMain();
                    
                       while (1) {
                       
                          //LED1 = 0; //debug
                          read_spi();
                          while (Chip_Select == 0) {}
                          
                          //debug
                          /*if(byte_count == 10) {
                             byte_count = 0;
                    
                             for(i=0;i<10;i++) {
                                Blink(op_codes[i]);
                                LED1 = 1;
                                Delay_ms(10000);
                                LED1 = 0;
                                Delay_ms(1000);
                    
                                Blink(addresses[i] >> 8);
                                LED1 = 1;
                                Delay_ms(10000);
                                LED1 = 0;
                                Delay_ms(1000);
                    
                                Blink(addresses[i]);
                                LED1 = 1;
                                Delay_ms(10000);
                                LED1 = 0;
                                Delay_ms(1000);
                             }
                          }*/
                       
                       }
                    
                    }
                    4. Фото хардварной переделки свистка в шапке.

                    5. Схема подключения PIC понятна из исходников первые несколько строк, если не понятна то наверное вам этого вообще делать не стоит. (Только не забываем подтягивать резет (первая нога) к + через резистор) На пик просто питание. Тактуется от внутреннего генератора.

                    6. Скомпилленый hex под PIC 18F25K20 во вложении. Хекс скомпилен с PID 3572 вместо родных 5572. Чтобы свисток подходил к телеку Samsung. Что бы запустить на винде необходимо в Inf файле драйвера поменять PID с 5572 на 3572. Или отредактировать дамп памяти eeprom_data в исходниках и заново скомпилить.
                    Вложения

                    Комментарий


                      #25
                      Благо дарю за ссылки.

                      По оценке верхней граничной скорости эмуляции есть что дополнить?
                      Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
                      Предупреждение: По всем коммерческим вопросам - только личка

                      Комментарий


                        #26
                        Сообщение от unicorp99 Посмотреть сообщение
                        По оценке верхней граничной скорости эмуляции есть что дополнить?
                        Нет к сожалению добавить нечего, верхняя граничная частота не известна. В принципе интерес к теме потерял, свисток сейчас успешно работает на телеке. Так как получил гарантию что всё работает, заказал память на aliexpress жду када придёт, отдеру pic и впаяю память.

                        Комментарий


                          #27
                          Сообщение от Nestik Посмотреть сообщение
                          Как и обещал весь материал. В форме статьи оформлять не буду.

                          1. Компилятор Micro C, бесплатная версия, код до 2 Кб, подходит. Качается тут.

                          2. Контроллер PIC18F25K20.

                          3. Исходный код:
                          Код:
                          sbit Chip_Select at RB7_bit;
                          sbit SoftSpi_CLK at RB6_bit;
                          sbit SoftSpi_SDI at RB5_bit;
                          sbit SoftSpi_SDO at RC3_bit;
                          //sbit LED1 at RC4_bit;  //debug
                          
                          sbit Chip_Select_Direction at TRISB7_bit;
                          sbit SoftSpi_CLK_Direction at TRISB6_bit;
                          sbit SoftSpi_SDI_Direction at TRISB5_bit;
                          sbit SoftSpi_SDO_Direction at TRISC3_bit;
                          //sbit LED1_Direction at TRISC4_bit;  //debug
                          
                          //unsigned char byte_count=0; //debug
                          //unsigned int addresses[10]; //debug
                          //unsigned char op_codes[10]; //debug
                          
                          const unsigned char eeprom_data [1024] =
                          {
                           0x72,0x55,0x03,0x01,0x64,0x70,0x02,0x0b,0x8f,0x5f,0x00,0x00,0x00,0x00,0x00,0x00,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0x00,0x00,0x00,0x00,0x22,0xff,0x80,0x00,0x00,0x01,0x27,0x01,0x55,0x55,0x99,0xbb,
                           0xff,0x08,0xff,0xff,0x08,0x0a,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x0a,0xff,0xff,
                           0x00,0x81,0x05,0x05,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x05,
                           0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x07,0x07,0x08,0x72,0x44,
                           0x0f,0x00,0x10,0x31,0x0f,0x00,0x72,0xe8,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,
                           0x0c,0x0c,0x0c,0x0c,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,
                           0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0x0d,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0d,
                           0x0d,0x0d,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,0x0e,
                           0x0e,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0x0f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0x00,0x00,0x00,0x00,0x20,0x53,0x34,0x0f,0x11,0x44,0x0f,0x00,0x82,0xec,0x66,0x66,
                           0xaa,0xaa,0x88,0x66,0xaa,0xaa,0x88,0x66,0xaa,0xaa,0x88,0x66,0xeb,0xaa,0x88,0x66,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0xef,0xff,0xff,
                           0xff,0xff,0xff,0xff,0x01,0x05,0xff,0xff,0x01,0x04,0x01,0x01,0xff,0xff,0x60,0x02,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,0x8f,0x14,0x72,0x35,0x01,0x01,0x01,0x02,
                           0x03,0x01,0x0a,0x06,0x00,0x02,0x00,0x00,0x00,0x40,0x01,0x00,0x09,0x02,0x35,0x00,
                           0x01,0x01,0x00,0x80,0xe1,0x09,0x04,0x00,0x00,0x05,0xff,0xff,0xff,0x05,0x07,0x05,
                           0x81,0x02,0x00,0x02,0x00,0x07,0x05,0x01,0x02,0x00,0x02,0x00,0x07,0x05,0x02,0x02,
                           0x00,0x02,0x00,0x07,0x05,0x03,0x02,0x00,0x02,0x00,0x07,0x05,0x04,0x02,0x00,0x02,
                           0x00,0x07,0x05,0x05,0x02,0x00,0x02,0x00,0x07,0x05,0x06,0x02,0x00,0x02,0x00,0x00,
                           0x52,0x61,0x6c,0x69,0x6e,0x6b,0x20,0x20,0x57,0x69,0x72,0x65,0x6c,0x65,0x73,0x73,
                           0x20,0x31,0x31,0x6e,0x20,0x20,0x20,0x20,0x31,0x2e,0x30,0x30,0x00,0x00,0x00,0x00,
                           0x12,0x01,0x00,0x02,0x00,0x00,0x00,0x40,0x8f,0x14,0x72,0x55,0x01,0x00,0x06,0x07,
                           0x08,0x01,0x0a,0x06,0x00,0x02,0x00,0x00,0x00,0x40,0x01,0x00,0x09,0x02,0x20,0x00,
                           0x01,0x01,0x00,0x80,0xe1,0x09,0x04,0x00,0x00,0x02,0x08,0x06,0x50,0x0a,0x07,0x05,
                           0x81,0x02,0x00,0x02,0x00,0x07,0x05,0x01,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x60,0x70,0xa2,0xff,0xa2,0x60,0x70,0xa2,0xff,0xa2,0xff,0xff,0xff,0xff,0xff,
                           0x04,0x03,0x09,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x0e,0x03,0x52,0x00,0x61,0x00,0x6c,0x00,0x69,0x00,0x6e,0x00,0x6b,0x00,0x00,0x00,
                           0x1e,0x03,0x38,0x00,0x30,0x00,0x32,0x00,0x2e,0x00,0x31,0x00,0x31,0x00,0x20,0x00,
                           0x6e,0x00,0x20,0x00,0x57,0x00,0x4c,0x00,0x41,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,
                           0x04,0x03,0x09,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0x00,0x00,0x08,0x03,0x31,0x00,0x2e,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
                           0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
                           };
                          
                          //debug function
                          /*
                          void Blink (unsigned char inbyte) {
                             unsigned char n;
                             unsigned char l_byte = 0x00;
                             unsigned char h_byte = 0x00;
                          
                             l_byte = inbyte & 0b00001111;
                             h_byte = inbyte >> 4;
                          
                             for (n = 0; n < h_byte; n++) {
                                LED1 = 1;
                                Delay_ms(1000);
                                LED1 = 0;
                                Delay_ms(500);
                             }
                          
                             for (n = 0; n < 30; n++) {
                                LED1 = 1;
                                Delay_ms(100);
                                LED1 = 0;
                                Delay_ms(100);
                             }
                          
                             for (n = 0; n < l_byte; n++) {
                                LED1 = 1;
                                Delay_ms(1000);
                                LED1 = 0;
                                Delay_ms(500);
                             }
                          }
                          */
                          
                          void InitMain() {
                          
                            Chip_Select_Direction = 1;             // Set CS# pin as input
                            SoftSpi_CLK_Direction = 1;             // Set CLK as Input
                            SoftSpi_SDI_Direction = 1;             // Set Data In as input
                            SoftSpi_SDO_Direction = 0;             // Set Data out as input begin far so output
                            //LED1_Direction = 0;                    //debug
                          
                          }
                          
                          void read_spi (){
                                unsigned char op_code;
                                unsigned int addr_h;
                                unsigned char i;
                                union {
                                  struct {
                                     unsigned b0:1;
                                     unsigned b1:1;
                                     unsigned b2:1;
                                     unsigned b3:1;
                                     unsigned b4:1;
                                     unsigned b5:1;
                                     unsigned b6:1;
                                     unsigned b7:1;
                                  } bits;
                                 unsigned char Byte;
                                } outbuf_s;
                                
                                op_code = 0;
                                addr_h = 0;
                                
                                while (1) {
                                   while (Chip_Select == 1) {}
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   op_code = op_code << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   op_code = op_code | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   
                                   if (op_code != 3) return;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h << 1;
                                   while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                   addr_h = addr_h | SoftSpi_SDI;
                                   addr_h = addr_h & 0x03FF;
                                   
                                   while (Chip_Select == 0) {
                                      outbuf_s.Byte = eeprom_data[addr_h];
                                      SoftSpi_SDO = outbuf_s.bits.b7;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b6;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b5;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b4;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b3;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b2;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b1;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                      SoftSpi_SDO = outbuf_s.bits.b0;
                                      while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                      addr_h++;
                                      if(addr_h > 0x03FF) addr_h = 0;
                                      while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                          
                                   }
                                   //op_codes[byte_count] = op_code;  //debug
                                   //addresses[byte_count] = addr_h;   //debug
                                   //byte_count++;  //debug
                                   return;
                          
                              }
                          
                          }
                          
                          void main() {
                          
                              OSCCON.IRCF0=1; //Set 16 Mhz internal RC
                              OSCCON.IRCF1=1; //Set 16 Mhz internal RC
                              OSCCON.IRCF2=1; //Set 16 Mhz internal RC
                              PLLEN_bit = 1;  //Enable PLL internal RC * 4
                              ANSEL = 0x00;   //Set all pin as digital
                              ANSELH = 0x00;  //Set all pin as digital
                              CM1CON0 = 0;
                              CM2CON0 = 0;
                              InitMain();
                          
                             while (1) {
                             
                                //LED1 = 0; //debug
                                read_spi();
                                while (Chip_Select == 0) {}
                                
                                //debug
                                /*if(byte_count == 10) {
                                   byte_count = 0;
                          
                                   for(i=0;i<10;i++) {
                                      Blink(op_codes[i]);
                                      LED1 = 1;
                                      Delay_ms(10000);
                                      LED1 = 0;
                                      Delay_ms(1000);
                          
                                      Blink(addresses[i] >> 8);
                                      LED1 = 1;
                                      Delay_ms(10000);
                                      LED1 = 0;
                                      Delay_ms(1000);
                          
                                      Blink(addresses[i]);
                                      LED1 = 1;
                                      Delay_ms(10000);
                                      LED1 = 0;
                                      Delay_ms(1000);
                                   }
                                }*/
                             
                             }
                          
                          }
                          4. Фото хардварной переделки свистка в шапке.

                          5. Схема подключения PIC понятна из исходников первые несколько строк, если не понятна то наверное вам этого вообще делать не стоит. (Только не забываем подтягивать резет (первая нога) к + через резистор) На пик просто питание. Тактуется от внутреннего генератора.

                          6. Скомпилленый hex под PIC 18F25K20 во вложении. Хекс скомпилен с PID 3572 вместо родных 5572. Чтобы свисток подходил к телеку Samsung. Что бы запустить на винде необходимо в Inf файле драйвера поменять PID с 5572 на 3572. Или отредактировать дамп памяти eeprom_data в исходниках и заново скомпилить.
                          :) уже с первой страницы закралось подозрение , что сия переделка нужна чтобы запилить стандартный тплинк к телеку, и на 3й таки подтвердилось. вот оказывается что делает с людьми нежелание платить лишних денег за родной модуль для самса, ну оно и в правду корейцы козлы уж шибко много за него хотят. и че было выпендриваться и не запилисть станартную поддержку вайфая. в общем молодцы однако!

                          Комментарий

                          Обработка...
                          X