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

UniSoft

Свой
  • Постов

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

  • Посещение

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

    4

Весь контент UniSoft


  1. Нет конечно... все как выше написали... только из 1 в 0 а у вас там итак будут нули, после первой записи 32-битного значения... просто, поменяйте просто местами Size и FIRMWARE_CRC16, ну или так, если требуется именно такая последовательность: page_address=FLASH_BASE+126*2048; FLASH_Unlock(); flash_status=FLASH_ErasePage(page_address); flash_status=FLASH_ProgramWord(page_address, (Size << 16) | FIRMWARE_CRC16); flash_status=FLASH_ProgramWord(page_address+4,Size >> 16); FLASH_Lock();
  2. принципиально неправильно! https://opensource.apple.com/source/xnu/xnu...c16.c.auto.html uint16_t crc = crc16(0, buffer1, len1); crc = crc16(crc, buffer2, len2);
  3. не нужен... на win8 и выше драйвер вообще будет не нужен... (он уже есть в системе начиная с win8) воткнули устройство драйвер автоматом установился... Более старые системы (win7 и ниже), после подключения устройства, попытаются подгрузить драйвер с microsoft update, если этого еще не было сделано ранее, при отсутствии же коннекта тогда понадобится драйвер (для оффлайн установки) (он уже ставится даже без подписанного cat, конечно будет предупреждение о не подписанном драйвере) Минус только один, при автоматической установке драйвера, устройство будет отображаться как WinUSB Device в диспетчере устройств. более подробно про WCID, можно почитать тут: https://github.com/pbatard/libwdi/wiki/WCID-Devices По поводу вашей проблемы, сложно что-либо сказать... все зависит от реализации... У себя с устройством на HS проблем не замечал... У меня так, отдельный тред постоянно слушает устройство и пишет данные в буфер... софтина уже оттуда все забирает...
  4. Я не могу даже представить тип устройства, где нужен именно одновременный доступ с разных приложений... Но если где это и нужно, то можно легко это обойти, при желании... Ну что-нибудь типа приложения сервера/службы, все равно же в таких устройствах нужен будет какой-то тип синхронизации, между приложениями, которые общаются с устройством. Но у меня же работает (со своими VID-PID!), причем коммерческий проект... все дело в WCID Откройте исходник libusb, в чем проблема? libusb-1.0.21.zip\libusb-1.0.21\libusb\os\windows_winusb.c; windows_winusb.h пожалуйста, динамическая линковка winusb, так что даже родной winusb.lib не нужен... а в windows_winusb.h определение функций и структур, так что даже родной winusb.h не нужен...
  5. Ну это не так! Подключать можно много устройств и со всеми можно работать... Ограничение лишь в монопольном доступе, т.е. только одно приложение сможет открыть устройство и работать с ним, в момент времени. А если устройство еще и WCID, то и дровишки будут автоматически устанавливаться. В win7 драйвер поставится c сервера обновлений (при наличии сети), а в win10 он уже встроен, и даже подписывать драйвер не требуется. Ну это тоже не так, вся работа заключена в одной winusb.dll Если линковать статически, то да, нужен будет *.lib файл из SDK (хотя его можно и сгенерить самому). Никакого мусора в проект там не перетаскивается, чистые winAPI функции. Ну и немного добавлю про libusb Она добавляет куда больше мусора в проект ибо является надстройкой над WinUsb
  6. за подробностями вам лучше к стандартам си обратиться. что оптимизирует? у вас массив из 11 элементов - локальная переменная, которая инициализируется неким значением, итого на заполнение этого массива поэлементно потребовалось бы как минимум 22 инструкции, а так всего 4 простым копированием. А вот как оптимизирует, все зависит от компилятора.
  7. так это оптимизация, а как он еще такое должен был реализовать? int32_t mass1 [11] = {55,36,3,67,84,123,53,7,47,65,217};
  8. это "Beagle USB 480 Protocol Analyzer" http://www.totalphase.com/products/beagle_usb480/
  9. достаточно один PHY....
  10. Keil STM32 Debug (printf) viewer

    У Keil есть соответствующий Application Note... по этой теме... http://www.keil.com/appnotes/docs/apnt_230.asp ну и еще можно и этот почитать... http://www.keil.com/appnotes/docs/apnt_197.asp
  11. если еще нужно, то вот _http://rghost.net/41814730
  12. под x32 тоже не видел, а в x64 постоянно... причем не сразу, а может и на второй день рухнуть (если не перезагружались)... По этой же причине я и отказался от него... Я авторам отписывал о проблеме, скидывал дамп... Но с выходом новой версии, проблема осталась... :( а старая пилюлька от EDGE подходит... _http://rghost.ru/40780035
  13. есть еще USBlyzer (_www.usblyzer.com) более стабильнее работает на Win 7 x64, но в нем очень не удобный hex-viewer... а вот USBTrace часто BSOD'ит особенно под x64...
  14. есть еще USBlyzer (_www.usblyzer.com) более стабильнее работает на Win 7 x64, но в нем очень не удобный hex-viewer... а вот USBTrace часто BSOD'ит особенно под x64...
  15. А разве Embarcadero RAD Studio может компилить 64-бит приложения? На сколько я знаю не может!
  16. Есть еще хороший HEX редактор 010 Editor, также умеет экспортировать как С, и многие другие форматы, интегрируется в контекстное меню проводника, а для спец нужд можно свой скрипт написать на си-подобном языке, взять можно тут: _хттп://cracklab.ru/download.php?action=get&n=ODQ1
  17. OMAP24xx

    Есть ли у кого-нибудь нормальный даташит по сабжу?
  18. думаю проблема в драйвере, просто возможно поставился драйвер от ulink-me, у них скорее всего одинаковый vid & pid (так как, в keil я не вижу отдельного драйвера для ulink-me), а точнее, там используется стандартный HID драйвер, просто разница в названии устройства в inf файле. так что, с этим не должно быть проблемы. А вот с тем, что не видит ARM, нужно глубже разбираться. но, для начала, все-же попробуйте сначала удалить устройство, и заново поставить.
  19. CRC-8

    Считано правильно, А процедура подсчета у меня так реализована... (хотя фактически это тоже самое, только сдвиг в другую сторону, и соответственно полином перевернут) unsigned char Crc8(unsigned char *pcBlock, unsigned char len) { unsigned char crc=0; unsigned char i; while (len--) { crc^=*pcBlock++; for(i=0;i<8;i++) crc=crc&1?(crc>>1)^0x8C:crc>>1; } return crc; } и еще, может вызов неверный, CRC8=Crc8(mas[0],7); разве не так нужно? CRC8=Crc8(&mas[0],7); или так: CRC8=Crc8(mas,7); вкладываю мою программку калькулятор, сам писал для PC, правда на ассемблере... если конечно кому-то нужно crc8sn.rar
  20. Вы что-то явно путаете, таких "происшествий" на USB нету... если интересно понять, как работает USB, вот тут описано, и довольно кратко, правда на английском. http://www.usbmadesimple.co.uk/index.html
  21. есть, такое... но можно на-гуглить вот такие ссылки... http://www.dumpz.ru/showpost.php?p=533673&postcount=390 http://rapidshare.com/files/294620815/nrCo..._7-2010_-_FS.7z http://www.onlinedisk.ru/file/244810/ Нет, FTDI это не CDC класс... А работать с FTDI вообще просто, одно удовольствие... они могут работать в двух режимах, либо как виртуальный ком порт, либо как D2XX устройство. Конфигурация (VID, PID, и режимы) программируются в eeprom, обычно весит снаружи, но есть и с внутренней eeprom'кой (обозначены как R, например FT232R, и в них, кстати, есть уникальный серийный номер, можно использовать для защиты от копирования)... В режиме ком порта, работать можно как с обычным ком портом... А в режиме D2XX, ftdichip предоставляют свой набор api функций в DLL, работа через которые намного упрощается... У них на сайте http://www.ftdichip.com есть и вся необходимая документация, а также множество примеров, под разные компиляторы.
  22. Ну тут уже нужно более детально анализировать протокол обмена... А там точно не используются дополнительные сигналы порта, как DTR и/или RTS??? либо программный контроль через BREAK??? не зря они там есть... А не отвечает, значит чего-то ждет, может нужно дрыгнуть какой ногой порта, либо может то самое дрыгание BREAK'ом... Это еще раз подтверждает, что устройство как-то перезапускается... и скорее всего это один из сигналов... а последний байт в командах это CRC (XOR всех байт) ;) Для более подробной информации нужно глубже копать само устройство
  23. упс, конечно-же, я не туда прописал константу hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, NULL, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O FILE_FLAG_OVERLAPPED // [color="#FF0000"][b]<<<< Вот тут ошибся[/b][/color] ); надо так hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, NULL, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING FILE_FLAG_OVERLAPPED , // not overlapped I/O NULL // );
  24. вот так должно работать #include <windows.h> #include <stdio.h> HANDLE hCom; char *pcCommPort = "\\\\.\\COM1"; int comport_read(HANDLE hPort,char *buffer,int cnt,int timeout) { DWORD dwErr; OVERLAPPED o; COMSTAT cstat; int BytesReaded = 0; int tmo = GetTickCount(); while ( (GetTickCount() - tmo) < timeout ) { ClearCommError(hPort, &dwErr, &cstat); if (cstat.cbInQue >= cnt) break; Sleep(1); // это нужно чтобы дать поработать другим процессам системы, // а не занимать весь временной слот ожидая данные и тем самым не грузить систему } BytesReaded = cstat.cbInQue; if (BytesReaded > 0) { if (BytesReaded > cnt) BytesReaded = cnt; o.Internal = 0; o.InternalHigh = 0; o.loffset = 0; o.OffsetHigh = 0; o.hEvent = 0; // можно и так // memclr(&o,0,sizeof(OVERLAPPED)); if (!ReadFile(hPort,buffer,BytesReaded,&BytesReaded,&o)) { BytesReaded = 0; } } return (BytesReaded); } void mem_read (char *buffer, WORD addr, unsigned char count) { unsigned char command_mem_request [8] = { 0, 0xFF, 0xFF, 1, 0xF0, 0xA6, 0x10, 0x47 }; unsigned char buffer2 [300]; OVERLAPPED o; PurgeComm(hCom, PURGE_TXCLEAR | PURGE_RXCLEAR); // Зачем это - не знаю. // В логе фирменной программы была установка/снятие BREAK // SetCommBreak (hCom); // ClearCommBreak (hCom); // Запрос железке // обнулим структуру OVERLAPPED o.Internal = 0; o.InternalHigh = 0; o.loffset = 0; o.OffsetHigh = 0; o.hEvent = 0; // можно и так // memclr(&o,0,sizeof(OVERLAPPED)); WriteFile (hCom, @command_mem_request, 8, &dwBytes, &o); if (dwBytes != 8) printf ("Error!!!\n"); // Хотим ответ // По факту возможно получаем dwBytes = comport_read(hCom,&buffer2,32,5000); // << ждем ответ 5 секунд printf ("%u bytes read!\n", dwBytes); } int main(int argc, char *argv[]) { unsigned char buffer, buffer_prev = 0xF0; COMMTIMEOUTS CommTimeouts; DCB dcb; hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, NULL, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O FILE_FLAG_OVERLAPPED // hTemplate must be NULL for comm devices ); if (hCom == INVALID_HANDLE_VALUE) { printf ("CreateFile failed with error %d.\n", GetLastError()); return (1); } if (!SetupComm (hCom, 1024, 300); ) { printf ("SetupComm with error %d.\n", GetLastError()); return (1); } if (!GetCommState (hCom, &dcb)) { printf ("GetCommState failed with error %d.\n", GetLastError()); return (1); } dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; if (!SetCommState(hCom, &dcb)) { printf ("SetCommState failed with error %d.\n", GetLastError()); return (1); } PurgeComm(hCom,PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR); if (hCom != INVALID_HANDLE_VALUE && hCom != NULL) printf ("COM1 cofigured!\n"); mem_read (NULL, 0xA6F0, 0x10); return (0); }
  25. А что за прога если не секрет? Если не большая, и написана не на каком-нибудь визуал басике или жаве, то я могу глянуть что там происходит.
×
×
  • Создать...