Объявление

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

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

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

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

    Господа, имеется адаптер TL-WDN3200 Ver 1.0 в нём установлен чип RT5572 нужно переключить на внешнюю EEPROM, пустое место под EEPROM на плате есть.

    Так как даташит на данный чип отсутствует то путём многочисленных экспериментов предположительно была найдена нога переключающая данный чип на внешнюю EEPROM. 8-ая нога. После подачи на данную ногу единицы драйвер под линукс в syslog начинает писать что используется EEPROM а не EFUSE (встроенная память) и адаптер определяется с умолчальными VID и PID 148f:2870 вместо родных 148f:5572.

    К сожалению у нас нет в продаже необходимой EEPROM AT25080, в связи с чем была написана программа под pic для эмуляции памяти и залит туда дамп из RT5572, pic стал успешно читаться как память на программаторе. Но запайка его в адаптер не дала результата. выведенный из Pic индикатор (светодиод) показывающий передачу данных из pic молчит. Тоесть pic не передаёт никаких данных. Вообщем вырисовывается несколько вариантов в чём может быть затык.

    1. Скорость обращений к памяти со стороны RT5572 слишком высока (AT25080 верхняя ганичная частота 2 Mhz) и Pic не успевает распознать протокол SPI. В пике используется программная реализация SPI.
    2. Спалил порты подключения памяти на RT5572 во время экспериментов запаяв туда память не того типа.
    3. Не верное переключение на использование внешней памяти.

    Так вот, чтобы подтвердить или опровергнуть 3-ий вариант и понять стоит ли дальше экспериментировать, мне нужно что бы кто-то кто имеет возможность приобрести 25080 память попробовал осуществить переделку адаптера и отписался тут о результате.

    Фото как необходимо переделать адаптер:
    Нажмите на изображение для увеличения.

Название:	df7cd1e1caa9.png
Просмотров:	1
Размер:	955.0 Кб
ID:	234045

    #2
    Сообщение от Nestik Посмотреть сообщение
    К сожалению у нас нет в продаже необходимой EEPROM AT25080, в связи с чем была написана программа под pic для эмуляции памяти и залит туда дамп из RT5572, pic стал успешно читаться как память на программаторе. Но запайка его в адаптер не дала результата. выведенный из Pic индикатор (светодиод) показывающий передачу данных из pic молчит. Тоесть pic не передаёт никаких данных. Вообщем вырисовывается несколько вариантов в чём может быть затык.

    1. Скорость обращений к памяти со стороны RT5572 слишком высока (AT25080 верхняя ганичная частота 2 Mhz) и Pic не успевает распознать протокол SPI. В пике используется программная реализация SPI.
    Конечно PIC не успевает. Данные PIC приведите. Рабочая частота и количество операций на выдачу результата по протоколу SPI.. (для ускорение реакции PIC-а отключите всё лишнее в циклах опроса и ответа, в т.ч. и индюкатор - если хочется - показывайте позднее)

    1 kb 93c46 - по идее - аналог
    подойдёт скорее всего и 2 и 4 kbyte микросхемы (будет использоваться первый 1 kb)

    Микросхему 1 кбайт SPI можно взять с плат LCD телевизоров, мониторов, с других еепром плат wifi, с сетевых чипов на материнских платах (там чаще 93c66)
    512 byte 93c66 - не подойдёт (мало памяти) (но если еепром короткий (такое бывает и в конце FF или 00) то можно попробовать)

    Прилагайте к больному месту дамп, что хотите шити..

    -----------------------

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

    Комментарий


      #3
      Сообщение от unicorp99 Посмотреть сообщение
      Конечно PIC не успевает. Данные PIC приведите. Рабочая частота и количество операций на выдачу результата по протоколу SPI.. (для ускорение реакции PIC-а отключите всё лишнее в циклах опроса и ответа, в т.ч. и индюкатор - если хочется - показывайте позднее)
      Тоже склоняюсь к этому варианту. 3-ий отпал вчера, пик получает данные от чипа, только не верно их интерпретирует потому назад ничего не шлёт значить чип переключился на использование EEPROM. Для тестов использую PIC18F25K20, работает на 64 Mhz тактовой (внутренний RC 16 Mhz * 4 PLL). В нём есть аппаратная SPI, но не хочу её задействовать по двум причинам. 1 В дальнейшем хотелось бы пик по проще приспособить. 2. Пик в планарном корпусе и подпаиваться к нему сложновато. Если бы кто смог осцилом замерить частоту CLK при обращении к памяти сразу всё стало бы понятнее.

      Сообщение от unicorp99 Посмотреть сообщение
      1 kb 93c46 - по идее - аналог
      подойдёт скорее всего и 2 и 4 kbyte микросхемы (будет использоваться первый 1 kb)
      Эмм 93-ей как грязи, но вот она ни разу не SPI, она microwire же? Да и распайка не под неё совсем.

      Сообщение от unicorp99 Посмотреть сообщение
      Микросхему 1 кбайт SPI можно взять с плат LCD телевизоров, мониторов, с других еепром плат wifi, с сетевых чипов на материнских платах (там чаще 93c66)
      512 byte 93c66 - не подойдёт (мало памяти) (но если еепром короткий (такое бывает и в конце FF или 00) то можно попробовать)
      К сожалению всё что было это сетевушки, пару вай фай роутеров везде либо 24 либо 93.

      Сообщение от unicorp99 Посмотреть сообщение
      Прилагайте к больному месту дамп, что хотите шити..
      Вечером до дома доберусь приложу дамп.

      Сообщение от unicorp99 Посмотреть сообщение
      Если охота, и сами писали имулятар SPI и готовы править - то прошу текст в студию - под SPOILER для наглядности
      так же вечером.

      Комментарий


        #4
        В общем если верить proteus, то граничная частота CLK без ошибочного чтения у данной программы при 64 Mhz это 100Khz. Плёхо. :(

        Компилятор micro c.

        Код:
        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;
        
        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;
        
        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,0x55,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
         };
        
        void SPI_Write_a (unsigned int addr) {
           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;
          unsigned char n = 0;
          unsigned int i = 0;
          unsigned char flag = 1;
        
          SoftSpi_SDO_Direction = 0;
          while (Chip_Select == 0) {
             if(n == 0) {
                n = 8;
                outbuf.Byte = eeprom_data[addr+i];
                i++;
                if (i == 1024) i = 0;
             }
             if (flag == 0 & SoftSpi_CLK == 1) {
                flag = 1;
             } else if (flag == 1 & SoftSpi_CLK == 0) {
                SoftSpi_SDO = outbuf.bits.b7;
                outbuf.Byte = outbuf.Byte << 1;
                flag = 0;
                n--;
             }
          }
          SoftSpi_SDO_Direction = 1;
        }
        
        unsigned char SPI_Read_b() {
        
          unsigned char inbuf = 0;
          unsigned char n = 0;
          unsigned char flag = 1;
        
          while (Chip_Select == 0) {
             if (flag == 0 & SoftSpi_CLK == 1) {
                flag = 1;
                inbuf = (inbuf << 1) | SoftSpi_SDI;
                if (n == 7) return inbuf;
                n++;
             } else if (flag == 1 & SoftSpi_CLK == 0) {
                flag = 0;
             }
        
          }
          return 0;
        }
        
        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 = 1;             // Set Data out as input begin far so output
          LED1_Direction = 0;
        
        }
        
        void main() {
            
            unsigned char op_code=0;
            unsigned char addr_l=0;
            unsigned char addr_h=0;
            unsigned int addr=0;
        
            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) {
            
              while (Chip_Select == 1) {
              }
              op_code = SPI_Read_b();
              if (op_code == 3) {
                 addr_h = SPI_Read_b();
                 addr_l = SPI_Read_b();
                 addr = addr_h;
                 addr = addr << 8 | addr_l;
                 SPI_Write_a(addr);
              }
              while (Chip_Select == 0) {
              }
           }
        }
        Дамп памяти во вложении.
        Вложения

        Комментарий


          #5
          Сообщение от Nestik Посмотреть сообщение
          Тоже склоняюсь к этому варианту. 3-ий отпал вчера, пик получает данные от чипа, только не верно их интерпретирует потому назад ничего не шлёт значить чип переключился на использование EEPROM. Для тестов использую PIC18F25K20, работает на 64 Mhz тактовой (внутренний RC 16 Mhz * 4 PLL). В нём есть аппаратная SPI, но не хочу её задействовать по двум причинам. 1 В дальнейшем хотелось бы пик по проще приспособить. 2. Пик в планарном корпусе и подпаиваться к нему сложновато. Если бы кто смог осцилом замерить частоту CLK при обращении к памяти сразу всё стало бы понятнее.

          Эмм 93-ей как грязи, но вот она ни разу не SPI, она microwire же? Да и распайка не под неё совсем.
          Ошибся, также думал что i2c 24c08 24c16 - аналог.. но нет, i2c, и, 93с46 - не SPI и не i2c протокол..

          берём даташитты

          SPI W25Q32 https://www.winbond.com/NR/rdonlyres...0/W25Q32BV.pdf
          i2c 24C16 http://www.bucek.name/pdf/24c16.pdf
          simple SPI http://ww1.microchip.com/downloads/e...Doc/21230E.pdf

          и чото немного совпадает только 25Q32 и 25C080..

          -------------------------

          у PICа питание 3.3 V - а у эмулируемой памяти?

          --------------------------

          64 MHz - это 16 млн операций (инструкция за 4 такта) - для эмуляции максимум 3-2MHz 25C080..
          то бишь 5-8 операций для бита данных SPI -

          примерно:
          1. выборка бита данных из 8-битного регистра (методы - циклический сдвиг битов с попаданием в регистр условий (в бит переноса)
          2. вставка бита переноса в регистр (или подготовка регистра к виду нужной выдачи)
          3. выдача регистра в порт выдачи данных (может 2 команды)
          4. ожидание бита продолжения запроса с порта (тактовый CLK вход - ждём 1)
          5. проверка с переходом на 4
          6. увеличение/уменьшение регистра счетчика битов
          7. переход если конец байта на 11..
          8.чтение бита начала запроса данных с порта (тактовый CLK вход - ждём нолик)
          9.проверка на условие - с переходом на 1, если бит есть
          10. переход на 8
          11.

          не зная команды PIC18 - там может быть две команды можно совместить в одну и т.д. - но может даже 2 MHz не потянуть.. Или нужно будет убирать все лишнюю муть компилятора C и оставлять голимый код - чуть ли не подряд код передачи по 8 бит без перерыва..

          Зная временные диаграммы (частоты) - можно немного ускорить код (оставить проверку только важных бит..) (конкретно выкинуть 8 9 10 а в 7 переход если не конец байта на 1)

          ---------------

          насчёт приспособить в дальнейшем слабый PIC под эмуляцию 25c080 - нужно глубоко в голову забить гвоздь на 200 мм - и повесить на него табличку: "не хочу купить 25c080.. Буду стрелять из пушки по воробьям.. Глупый, не знаю магазин в инете "чипа дипа".. жадный до одури.."
          Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
          Предупреждение: По всем коммерческим вопросам - только личка

          Комментарий


            #6
            Сообщение от Nestik Посмотреть сообщение
            В общем если верить proteus, то граничная частота CLK без ошибочного чтения у данной программы при 64 Mhz это 100Khz. Плёхо. :(
            прога эмулирует только команду 3 (в живой 25c080 - 8 команд) - может быть Chip_select компенсирует этот недостаток..

            компилятор ничего не оптимизирует походу, struct в функции SPI_write кончает всю скорость.. вместо SPI write походу нужна асм вставка микрокода

            код функции SPI write нужно вставлять прямо сразу за детектом команды 3 без долгой инициализации переменных (то бишь максимально ускорять SPI write..)

            так как каждый такт на счету между приёмом команды и выдачей результата, то

            addr_h = SPI_Read_b();
            addr_l = SPI_Read_b();
            addr = addr_h;
            addr = addr << 8 | addr_l;

            по идее сокращается в

            addr = SPI_Read_b() <<8; // addr_h
            addr = SPI_Read_b() | addr; // addr_l

            с убиранием двух переменных addr_h и addr_l

            ну и далее убираем union .. outbuf

            и цикл между

            SoftSpi_SDO_Direction = 0;
            ..
            SoftSpi_SDO_Direction = 1;

            меняем на

            unsigned char outb = eeprom_data[addr];

            while (Chip_Select == 0) {
            if (flag == 0 & SoftSpi_CLK == 1) {
            flag = 1;
            }
            else if (flag == 1 & SoftSpi_CLK == 0)
            {
            SoftSpi_SDO = (outb & 0x80) >>7; // вот здесь можно на асм ещё упростить наверняка
            outb = outb << 1;
            flag = 0;
            if (--n == 0)
            {
            n = 8;
            outbuf.Byte = eeprom_data[addr+i];
            if (++i == 1024) i = 0;
            }
            }
            }

            ну а для полного разбора полётов нужно смотреть оригинальный рабочий дизасм и если можно - мой код сдизасмить.. что там с компилит в чо..
            также, я не вкурил, нахрена переменная флаг (в смысл не углублялся) - ну и без неё можно убрать инициализацию n и i в другие места, чтобы СОКРАТИТЬ время между приёмом команды и выдачей битоф..
            Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
            Предупреждение: По всем коммерческим вопросам - только личка

            Комментарий


              #7
              Сообщение от unicorp99 Посмотреть сообщение
              не хочу купить 25c080
              Честно не хочу. во первых мороки с заказом много, во вторых время, в третьих нет гарантии что всё это вообще заработает. Было бы точно известно что заработает подумал бы, а так... Спасибо за содействие.

              Есть тут владельцы WDN3200 кто может по экспериментировать? Откликнитесь.

              Комментарий


                #8
                unicorp99, вы не много не туда смотрите, для того чтобы что-то записать нужно сначала правильно считать. Поэтому сейчас задача ускорить Read насколько это возможно. да там эмулируется только 03 чтение ибо остальное думаю нафиг ненадо CS всёравно всё сбрасывает.

                Комментарий


                  #9
                  Сообщение от Nestik Посмотреть сообщение
                  Честно не хочу. во первых мороки с заказом много, во вторых время, в третьих нет гарантии что всё это вообще заработает. Было бы точно известно что заработает подумал бы, а так... Спасибо за содействие.

                  Есть тут владельцы WDN3200 кто может по экспериментировать? Откликнитесь.
                  во-первых, это WND3200..

                  во-вторых - мыши плакали, кололись, но продолжали жрать кактус - это не позиция. и, Гарантия, что заработает - есть! Нахрена тогда со слюнями и соплями отнимать у всех время, мол, сделайте всё за меня, у мну ручонки трясуцо..

                  в-третьих, владельцев WND3200 со знанием PIC и свободным временем в принципе нет. Дерзайте! Кто захочет - мож через гот присоединица.. (Но народ тупо запаяет 25C080 и проверит)..
                  Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
                  Предупреждение: По всем коммерческим вопросам - только личка

                  Комментарий


                    #10
                    Сообщение от unicorp99 Посмотреть сообщение
                    (Но народ тупо запаяет 25C080 и проверит)..
                    Именно этого я и хочу. А что вы так нервничаете?

                    Комментарий


                      #11
                      Сообщение от Nestik Посмотреть сообщение
                      unicorp99, вы не много не туда смотрите, для того чтобы что-то записать нужно сначала правильно считать. Поэтому сейчас задача ускорить Read насколько это возможно. да там эмулируется только 03 чтение ибо остальное думаю нафиг ненадо CS всёравно всё сбрасывает.
                      В проге не увидел действий со индюкатором LED1. по сему судить о приёме команд неверно.. вставляйте чтобе загоралося кудынибуть. НО - для скорости - каждая команда на счету..
                      Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
                      Предупреждение: По всем коммерческим вопросам - только личка

                      Комментарий


                        #12
                        Сообщение от unicorp99 Посмотреть сообщение
                        В проге не увидел действий со индюкатором LED1.
                        Убрал просто весь дебаг для компактности. Был и на чтении отдельно и на записи. Чтение идёт, запись нет, так как опкод принимается не верно. Даже была небольшая функция которая мигала светиком показывая какие байты приняты. Принимает хрень какуюто всегда разную. Когда читаю программатором там всё верное мигает 03 код. Из этого и сделал вывод что просто не хватает скорости.

                        Комментарий


                          #13
                          Сообщение от Nestik Посмотреть сообщение
                          Убрал просто весь дебаг для компактности. Был и на чтении отдельно и на записи. Чтение идёт, запись нет, так как опкод принимается не верно. Даже была небольшая функция которая мигала светиком показывая какие байты приняты. Принимает хрень какуюто всегда разную. Когда читаю программатором там всё верное мигает 03 код. Из этого и сделал вывод что просто не хватает скорости.
                          Теперь паяем панельку - переходник - для USB-свистка - ну и для программатора - чтобы отлаживать оптимизированную программу..
                          и внимательно проверяем все ножки и контакты - паяем на ВСЕ входы/выходы индюкаторы активности, чтобы видеть чо происходит.. А то мож не туда припаяли, или контакта нет.. А не скорости не хватает..

                          по чтению SPI_read не вкуриваю, как именно получше на языке C соптимайзить..

                          if (n == 7) return inbuf;
                          n++;

                          можно поменять на
                          if (n++ == 7) return inbuf;

                          или на
                          if (++n == 8) return inbuf;

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

                          --------------

                          вызов подпрограммы SPI_read с тремя параметрами - о це лишних 10-15 команд - существенное снижение скорости.. -> вставляйте текст SPI read в функцию main.. Да, да, трижды.. И нужно переделать под присвоение результата..

                          Для анализа скорости Нужен дизасм микрокода опосля компилятора.

                          приложите все необходимые файлы - исходник, компилятор (прога), дизасм (прога), текст дизасма - я могу глянуть быстренько, во что врубаюсь - переделаю быстрее - но и как вы сами понимаете, нужно будет проверять на программаторе.. у мну PICа нема, посему проверять Вам..
                          Последний раз редактировалось unicorp99; 19.08.2014, 18:19.
                          Программа для прошивки 5210G в NanoStation 2 - http://wa5210g.blogspot.com
                          Предупреждение: По всем коммерческим вопросам - только личка

                          Комментарий


                            #14
                            Тащемто вот такой конструкцией удалось стабильно считать со свистка код 03, значить есть ещё шанс побороться.
                            Считывание уровня с пина в одном полупериоде CLK и сдвиг бита вверх в другом. Никаких циклов и прочих переходов тупо подряд: ожидание уровня, считывание, сдвиг.
                            Код:
                                     while (Chip_Select == 1) {}
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                                     while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf << 1;
                                     while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                                     inbuf = inbuf | SoftSpi_SDI;
                            Дизасм считывания одного бита этого творения.
                            Код:
                            ;at25080_emulate.c,187 ::                 while (SoftSpi_CLK == 0) {if (Chip_Select == 1) return;}
                            L_read_spi35:
                            0x010C        0xBC81              BTFSC       RB6_bit, BitPos(RB6_bit+0) 
                            0x010E        0xD004              BRA         L_read_spi36
                            0x0110        0xAE81              BTFSS       RB7_bit, BitPos(RB7_bit+0) 
                            0x0112        0xD001              BRA         L_read_spi37
                            0x0114        0xD0B2              BRA         L_end_read_spi
                            L_read_spi37:
                            0x0116        0xD7FA              BRA         L_read_spi35
                            L_read_spi36:
                            ;at25080_emulate.c,188 ::                 inbuf = inbuf | SoftSpi_SDI;
                            0x0118        0x6A00              CLRF        R0 
                            0x011A        0xBA81              BTFSC       RB5_bit, BitPos(RB5_bit+0) 
                            0x011C        0x2A00              INCF        R0, 1 
                            0x011E        0x5000              MOVF        R0, 0 
                            0x0120        0x1215              IORWF       read_spi_inbuf_L0, 1 
                            ;at25080_emulate.c,189 ::                 while (SoftSpi_CLK == 1) {if (Chip_Select == 1) return;}
                            L_read_spi38:
                            0x0122        0xAC81              BTFSS       RB6_bit, BitPos(RB6_bit+0) 
                            0x0124        0xD004              BRA         L_read_spi39
                            0x0126        0xAE81              BTFSS       RB7_bit, BitPos(RB7_bit+0) 
                            0x0128        0xD001              BRA         L_read_spi40
                            0x012A        0xD0A7              BRA         L_end_read_spi
                            L_read_spi40:
                            0x012C        0xD7FA              BRA         L_read_spi38
                            L_read_spi39:
                            ;at25080_emulate.c,190 ::                 inbuf = inbuf << 1;
                            0x012E        0x3615              RLCF        read_spi_inbuf_L0, 1 
                            0x0130        0x9015              BCF         read_spi_inbuf_L0, 0
                            Всё на сегодня всё.

                            P/S Пока вопрос по write. Как начать считывание из старшего бита, без битовой структуры? Старший бит должен идти первым.
                            Последний раз редактировалось Nestik; 20.08.2014, 00:58.

                            Комментарий


                              #15
                              Сообщение от Nestik Посмотреть сообщение
                              Всё на сегодня всё.
                              Ахренеть, я поражен. Ташкент рулит!
                              Такого уровня разбора полётов я не ожидал.

                              Правильно вставлена команда >> в другом периоде цикла!

                              Я верил в чюдо - посчитал даже такты - и вот оно!

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

                              Это нужно для оценки уровня возможности вставок кода..

                              Афигеть, что в Ташкенте понятна ненужность переменной "флак", в руки, барабан на шею и т.д.
                              Второе -
                              если такой уровень понимания, то нужно свести сишный кот while из 6-ти команд к двум ассемблерным.. (если не хватит скорости, то Chip Select можно апустить и тилька адин рас в начале иго чекать

                              Вот для примера:
                              код while не оптимизирован, компилятор тупо добавляет лишние команды (для ухудшения показателей программ, чтобы генерился большой кот и покупали более быстрые PIC-и, гандурасовцы раздувают программы и ухудшают показатели железа..)
                              в команде 112 меняем spi37 на spi35 и убираем команду 116

                              зачем команда 130 ?

                              не поняв савсэм прицып команд 11e и 120.
                              может можно убрать их и сделать только 11с - INCF read_spi_inbuf_L0,1

                              короче, скорости хватит..

                              Сообщение от Nestik Посмотреть сообщение
                              P/S Пока вопрос по write. Как начать считывание из старшего бита, без битовой структуры? Старший бит должен идти первым.
                              я писал выше код write

                              SoftSpi_SDO = (outb & 0x80) >>7; // вот здесь можно на асм ещё упростить наверняка
                              outb = outb << 1;

                              ---------

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

                              Комментарий

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