Перейти к содержанию
    

ДЕЙЛ

Свой
  • Постов

    767
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Сообщения, опубликованные ДЕЙЛ


  1. В общем виде - да.

    Если инициирование программное, то после него ведомое устройство может передавать данные в комп? Если оно может передавать данные, то почему нельзя их передать без инициации самовольно? Мне пока не нужно, чтобы комп правильно определил тип устройства, просто хочу увидеть свои байты в нём.

     

  2. Если хост не инициировал транзакцию на шине, можете до посинения ждать - ничего не произойдет.

    Инициирование программное? Хост отправил какие-то данные, их примет EP0, потом контроллер посмотрит, что принято и после этого будет думать, что дальше сделать. Так?

  3. ой ли?

    не знаю, как там в Яре, по идее то же самое, что и в Кейле. А там - всего-то 4 файла - usbcore.c, usbdesc.c, usbhw.c и usbuser.c

    в папке с примером 107 файлов. Покрутил эти 4 файла - наглядности маловато и пример не для моей платы. Хочется увидеть минимальный код для отправки пакета, а потом уже глубже копать. Светодиодом моргать никто не начинал с распутывания килобайтов кода.

     

    Если не трудно, то напишите последовательность действий для отправки пакета в комп. Как в общих четрах строить алгоритм? Какие биты менять, какие проверяить и что в обработчике прерывания писать?

  4. Если Вы его не отправляете в ISR то откуда же он возьмется???

    А у Вас ISR пустой совсем.

    В ISR нужно, проверив причину прерывания, и узнав что это фреймовое прерывание, явно выбрать соответствующий буфер конечной точки и загрузить его.

    Что куда и как отправлять? Как это будет выглядеть на примере моего кода? Что нужно дописать или изменить?

     

    Откройте любой пример для данного МК и посмотрите что там делается в обработчике прерывания.

    В IAR есть хороший пример для изохронной точки для данного МК.

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

     

  5. Ну если получаете фреймовые прерывания, тогда разве трудно поставить туда бряк и посмотреть - что у Вас в этом прерывании делается - отправляется-ли изохронный кадр?

    Чем бряк поможет? Аппаратную часть из программы не видно, остаётся наслово верить руководству, что пакет оправляется при очередном прерывании фрейма после проверки буфера. Я ожидаю увидеть свои байты в мониторе USBTrace. Как ещё можно увидеть, что кадр отправлен? Если только через какие-то флаги смотреть, но в конечном итоге нужно увидеть принимаемые данные на компе в мониторе.

     

    12.14.3 Data transfer for IN endpoints

    When writing data to an endpoint buffer, WR_EN (Section 12.10.4.5 ”USB Control

    register”) is set and software writes to the number of bytes it is going to send in the packet

    to the TxPLen register (Section 12.10.4.4). It can then write data continuously in the

    TxData register.

    When the number of bytes programmed in TxPLen have been written to TxData, the

    WR_EN bit is cleared, and the TxENDPKT bit is set in the DevIntSt register. Software

    issues a Validate Buffer (Section 12.12.14 ”Validate Buffer (Command: 0xFA, Data:

    none)”) command. The endpoint is now ready to send the packet. For IN isochronous

    endpoints, the data in the buffer will be sent only if the buffer is validated before the next

    FRAME interrupt occurs; otherwise, an empty packet will be sent in the next frame. If the

    software clears WR_EN before the entire packet is written, writing will start again from the

    beginning the next time WR_EN is set for this endpoint.

    Both RD_EN and WR_EN can be high at the same time for the same logical endpoint.

    Interleaved read and write operation is possible.

  6. Пытаюсь отправить пакет в ПК, где его ждёт программа-монитор USBTrace. При включении подтягивающего резистора в мониторе вижу, что винда отправила какой-то запрос, все байты на виду, но мне они пока не нужны. Жду окончания запроса и пытаюсь отправить свой пакет, но почему-то пока никак.

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

     

    #include "iolpc1778.h"
    #include "LPC17xx.h"
    unsigned int i;
    void main(void)
    {
    
       { //INIT 
    SCS        |= 0x20;        //подключение осциллятора
    while(!(SCS&0x40)){}       //ожидание запуска
    
    //Настройка тактирования ЦПУ
    PLL0CON |= 0x01;           //включение PLL0 
    PLL0CFG |= 0x09;           //умножение частоты на 10
    PLL0FEED = 0xAA;           //разрешение
    PLL0FEED = 0x55;           //изменений  
    CCLKSEL |= 0x100;          //переключение источника тактирования
    
    //настройка тактирования USB
    PLL1CON  |= 0x01;          //Включение PLL1
    PLL1CFG  |= 0x03;          //Умножаем частоту на 4 (12МГц*4=48МГц)
    PLL1FEED  = 0xAA;          //разрешение   
    PLL1FEED  = 0x55;          //изменений   
    USBCLKSEL = 0x201;         //Тактирование USB от PLL1 и частота тактирования 48МГц
    
    IOCON_P1_25 = 0;           //PIO
    FIO1DIR     = 0x2000000;   //Выход PIN1_25 для индикации прерывания
    
    {   //init USB
    PCONP       |= 0x80000000; //включение питания USB
    
    USBCLKCTRL  |= 0x12;       //устанавливаем флаги DEV_CLK_EN + AHB_CLK_EN 
    while(!(USBCLKST & 0x12)){}//ждём установки флагов
    
    USBCLKCTRL  |= 8;          //устанавливаем флаг доступа к регистру выбора конфигурации функции порта
    while(!(USBCLKST & 0x08)){}//ждём установки флага
    USBPORTSEL   = 3;          //U2 - ведомый      
    USBCLKCTRL  &=~8;          //сброс флага доступа 
      
    IOCON_P0_31  = 1;          //функция ножк U2D+, на U2D- других функций нет
    
    IOCON_P0_14  = 0;          //USBCONNECT - управление подтягивающим резистором
    FIO0DIR     |= 0x4000;     //bit 14 - OUT 
      
    USBDEVINTEN  = 0x01;       //разрешение прерываний FRAME
    }
      
    PCLKSEL    = 1;            //тактирование переферии 1:1 
    CLKSRCSEL |= 1;            //тактирование CPU от PLL0 
    
    
    AIRCR = 0x05FA0200;        //настройка 
    IP1   = 0x00000800;        //и разрешение 
    NVIC_EnableIRQ(USB_IRQn);  //прерываний 
    
    }  
    
    
    while(1)
    {
      FIO0SET |= 0x4000;               //1.5 kOm        
      USBREEP |= 0x80;                //задействована изохронная точка 7 (IN)
      while(!(USBDEVINTST & 0x100)){} //ждём установки флага EP_RLZED 
      
      for(i=0; i<0x2FFFFFF; i++ )
         {
           __NOP(); 
         }                  //небольшая пауза для пропуска запроса от windows  
    
      USBTXPLEN   = 40;               //начальное значение счётчика байтов в пакете
      USBEPIN     = 7;                //индекс конечной точки 
      USBMAXPSIZE = 40;               //максимальный размер пакета для указанной конечной точки
      while(!(USBDEVINTST & 0x100)){} //ждём установки флага EP_RLZED 
      
      USBCMDCODE = 0x0500 + 0x070000; //выбор конечной точик
      
      USBCTRL = 0x2 + 0xC;                    //WP_EN = 1, LOG_ENDPOINT = 3;
      
      TDATA = 0x12345678;
      TDATA = 0x91011121;
      TDATA = 0x31415161;
      TDATA = 0x71819202;
      TDATA = 0x12223248;
      TDATA = 0x12345678;
      TDATA = 0x12345678;
      TDATA = 0x12345678;
      TDATA = 0x12345678;
      TDATA = 0x98765432; //после этой команды сбрасывается WP_EN
    
      
      USBCMDCODE = 0x0500 + 0xFA0000; //команда + проверка буфера
    
      
      for(i=0; i<0x8FFFFFF; i++ ){__NOP(); }
      FIO0CLR |= 0x4000;              //отключение резистора 1.5 кОм
      for(;;){}
    }
      
    }
    
    
    void USB_IRQHandler (void) 
    {
    USBDEVINTCLR |= 0x3FF; //clear alls interrupt
    FIO1CLR     = 0x2000000;
    FIO1SET     = 0x2000000;
    FIO1CLR     = 0x2000000;
    NVIC_ClearPendingIRQ(USB_IRQn);
    return;
    }

     

    что я не так делаю?

    LPC.rar

  7. Вот ещё один раздел. Ошибок там хватает, т.к. пока вживую не гонял USB, поэтому прошу указать на ошибки. Вопросительным знаком помечаю непонятные для меня моменты.

     

    Раздел 13. Хост USB

    _______13______USB.pdf

  8. Я в детстве делал электромагнит из тысяч витков волоска на гвозде, подключал к 9вольтовой кроне и отключал, так вот во время отключения меня по всей руке трясло сильнее, чем от розетки. Не мог понять, как 9 вольт так вот трясут, поэтому продолжал искрить до разрядки батарейки. Этот опыт мне запомнился и намного позже в универе уже ясно представлял себе, что катушка может запасать энергию и пытаться через воздух пустить ток. :rolleyes: Повторять эксперимент не советую.

     

    Приведу ещё одну аналогию: конденсатор можно зарядить током 1 мА, но при замыкании на нагрузку может дать ток 20мА, 20А, 20кА при сохранении в первый момент на обкладках той же разницы потенциалов, что была и до коммутации на нагрузку. С катушкой всё аналогично, но отличие в том, что она пытается сохранить ток, который был до момента переключения на нагрузку, отсюда и повышение напряжения. Представь, что катушка подключена к источнику напряжения 10В через резистор 10 кОм, т.е. в ней течёт ток 1мА, если её быстро извлечь из цепи и замкнуть на резистор 100 кОм, то по закону Ома в первый момент на катушке будет напряжение не 10В, а 100кОм*1мА = 100В, это и есть повышение напряжения.

  9. Ух, до чего же на книжку Мартина Тревора по LPC214x похоже !

    Согласен. Только почему-то нет разделов USB Host и USB OTG. О чём в двух словах там расписано? И чем эти разделы отличаются от раздела USB device? Это отдельные модули или отдельные режимы работы одного модуля?

  10. 1. CAN или RS485?

    2. Нужна ли в данной физической обстановке опторазвязка Ведомых от витой пары-луча?

    3. Какие IC-приёмопередатчики CAN/RS485 <-> UART посоветуете?

    4. Я правильно понимаю, что в такой сети можно обойтись RS485 с тайм-слотом в сотню-другую миллисекунд? и чем лучше будет применение CAN?

    5. Какие-то наработки из MODBUS тут применимы? при условии, что всё фирмваре я буду делать на ассемблере? система-закрытая, не будет общаться с вне.

    имел дело с RS485, могу сказать, почему применил бы его

    1. Число ведомых до 32 нагруженных, как подсказывает википедия

    2. Опторазвязка никогда лишней не будет, я имел дело с преобразователями RS485<>232 MAX1480, если правильно вспомнил. Древние, дорогие, но с трансформатоной развязкой по питанию и опторазвязкой по передаче данных. Ещё они дубовые, т.е. надёжные.

    3. Помехоустойчивость такая, что даже при расположении витой пары вдоль шин питания мегаваттных двигателей с частотным регулированием картина не портилась. Сам осциллографом смотрел.

     

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

  12. В интернете фигурирует только обложка от книжки Кто знает, вышла она или нет? Найти нигде не могу.

     

    Если она сама переводиться не хочет, то почему бы самим заинтересованным не перевести? Я пока на досуге два раздела перевёл, хотелось бы критики насчёт принципиальных ошибок в переводе. Дальше ещё буду выкладывать по мере перевода нужных разделов. Ну и буду надеяться, что кто-то найдёт полную книжку :1111493779:

    В прикреплённам архиве:

    Раздел 12 - контроллер USB

    Раздел 16 - контрроллер SD интерфейса

    ________12___14__USB___CD____________.rar

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

  14. Доброй ночи! Копаюсь в интернете на эту тему, но пока безрезультатно. Видел описания команд работы с SD-картой - команды инициализации, стирания, чтения и т.д. Где можно найти аналогичное описание алгоритма работы с обычной флешкой USB?

  15. В схеме явно неисправный транзистор, PN-переход выгорел, когда потенциометр крутил, следом амперметр подплавился от перегрузки, поэтому так показывает. :rolleyes: Нужно теперь схему по частям проверять - сначала отдельно амперметр, затем вольтметр. Потом проверить правильность закона Ома, потом подключить диод последовательно и после этого с транзистором экспериментировать.

     

    Для полноты картины советую автору выложить вместе со скрином исходный файл всего этого хозяйства. Мошть кто и найдёт неисправность в схеме - мошть какие тайные линии связей, не те указанные характеристики или не в тех единицах и т.д.

  16. Изучаю возможности интернета применительно к электронике. Имеются два модуля GSM, которые могут отправлять данные на любой сервер с белым айпишником по TCP. Этот любой сервер присылает ответ о некорректности запроса. Хочу сделать свой сервер, который точно так же сможет принимать данные, отправлять ответ и быть доступным в интернете. Насчёт белого айпишника ничего сложного нет . Понятное дело, что нужно почитать про компьютерные сети, а что ещё нужно для создания сервера? Если освоить PHP, то этого будет достаточно?

  17. А почему нельзя прочитать руководство к модулю с примерами установки соединения и приема.отправки ? Гораздо быстрее и понятнее будет.

    там нет такого описания, только в общих чертах сказано, какими командами отпралять данные по какому-либо адресу, щас просто интересуюсь, попробовать руки пока не дошли

     

    А теперь самое время погуглить и узнать про "серые" и "белые" ip-адреса. И про NAT.

    погуглил. Но ведь я отправляю в интернет байты, в ответ ругательства, но тоже с какого-то сервера приходят. Значит этот сервер может мои байты переслать другому такому же модулю. Т.е. для передачи данных между GSM-модулями с серыми адресами обязательно нужен промежуточный сервер?

     

     

    А если у меня серый адрес, то в пределах одной соты можно общаться?

  18. Нет, это айпишники специальных серверов, которые преобразуют буквенные адреса в "айпишники" по запросу вашего модуля.

    Второй адрес -- дублер на случай выхода из строя первого.

    Что такое ДНС? Объясните,

    DNS-сервер — как это работает

    dns сервер что это

     

    Успехов!

    дошло вчера :rolleyes:

     

    Вечером получалось соединиться с интернетом. Писал что-то вроде

    AT+CIPSTART="TCP","ya.ru",80

    затем указал число передаваемых байт и от балды набранные с клавиатуры символы.

    В ответ пришёл текст в HTML-тегах, где было написано, что запрос некорректный. Т.е. получается, что связь с интернетом настроена, данные от меня доходят до удалённого сервера. Теперь крутится вопрос - а нельзя ли вместо "ya.ru" указать айпишник второго GSM-модуля и точно так же отправить данные? Проверить пока руки не дошли.

  19. Читаю вот тут: http://habrahabr.ru/post/119030/

    не совсем понятна строка

    "AT+CDNSCFG="8.8.8.8","8.8.4.4"" Этой командой устанавливаются сервера DNS, которые будет использовать модуль

    в мануале пишут, что это первый и второй домен. Т.е. айпишник первого модуля и второго?

  20. Как вариант, можно использовать CSD-вызов - это вообще сверх элементарно :)

     

    Установка соединения с сервером по гпрс - это, грубо говоря, одна ат-комманда :)

     

    Ничего сверхъестественного в этом нету. Все описано миллионы раз в инете и тысячи - конкретно на этом форуме.

    пока вроде соединился с интернетом, увидел свой айпишник. Каков сам принцип передачи файла с одного модуля на другой? Кто и как учавствует в этой передаче? Какую теорию почитать надо? Скачал книгу Попова про GSM - там всякие ячейки интерференции, скачал про GPRS - там услуги связи и перспективы роста скорости мобильного интернета. :wacko:

     

    написано, что модуль не поддерживает FTP и HTTP.

    на что это может повлиять? Для чего его можно применить?

×
×
  • Создать...