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

MEFF

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о MEFF

  • Звание
    Участник
    Участник

Посетители профиля

1 096 просмотров профиля
  1. А что за примеры? И как вставить этот байт и снизить частоту?
  2. Сделал dbgjtag -f brddat\ccBrd0.dat -rv -o -F inform,logfile=yes -S pathlength -S integrity Кабель JTAG - короткий, 5 см. На Vref ноге 5V. Что еще можно сделать? =(
  3. Неужели, никто не подскажет, чем запрограммировать F240 через JTAG? =(
  4. Имеется устройство с TMS320F240PQ. Обновляли прошивку через спец. утилиты по UART и она запоролась (плохой контакт, я думаю). Утилита пишет, что теперь используйте JTAG. OK. 14-пин гребенка выведена, OUT файл имеется, был приобретен китайский XDS510. Китаец скинул ссылку на USB-драйвер, драйвер для ССS 3.3, дистрибутивы CCS. CCStudio 3.3 запускается, устройство видит, но On-Chip flash programmer вроде не умеет программировать F240 (так в хелпе написано, The flash programmer does not support TMS320LF24x devices (240, 241, 243)). Setup ccstudio настроен как на скриншоте. xdsprobe пишет вот так, все тесты проходит [quoute] This utility has selected an XDS510 class product. This utility will load the adapter 'XDS510U2.dll'. This utility will operate on port address '0x0240'. TDS510USB Emulator found (USB 2.0 port) The controller does not use a programmable FPGA. The emulator adapter is named 'XDS510U2.dll'. The emulator adapter is titled 'Custom block-mode adapter for use with an TDS510'. The emulator adapter is version '33.0.0.0'. The emulator adapter is using 'Block-Mode'. The controller has a version number of '1' (0x0001). The controller has an insertion length of '16' (0x0010). The local memory has a base address of '0' (0x000000). The local memory has a word capacity of '262144' (0x040000). ... None of the test-cases have detected errors. [/quoute] Нашел инструкцию http://emulators.spectrumdigital.com/utili...sh_faq.html#1.5, как заставить sdflash 1.64 программировать F240 (скрещивается с sdflash 1.12). Драйвер указываю C:\CCStudio_v3.3PLA\drivers\tixds24x.dvr (как в setup ccstudio) Но ДСП не видит =( Так же вместе с драйвером идет консольная утилита flash.exe, которая умеет F204, но она так же не видит =( У нее даже нет опции какой драйвер/порт использовать =( board.cfg я подредактировал, для xdsprobe/xdsreset не нужно указывать устройство/порт. Есть какая-то возможность ведения лога, чтобы посмотреть, к какому драйверу и по какому адресу эти программы обращаются? И что еще можно посмотреть?
  5. Спасибо. Действительно здравые мысли. Я и сам после создания темы пришел к аналогичным выводам. То, что задержка с передачей RX/TX может специально откладываться не подумал, тоже надо будет проверить. Надо собрать больше инфы =( К сожалению, доступа к переходнику пока нет, буду готовиться. Буду эмулировать прогу на ПК и буду эмулировать переходник на компе+МК. С преобразованием в хекс пока не понятен размерность данных =( Напишу парсер для вывода лог анализатора, а то осциллограммы совсем не удобны для этого =( Думал, кто-нибудь узнает в этой последовательности BCD какой-нибудь, хитрую 5-битную кодировку или что-то подобное... ну да ладно
  6. Хуже =) Не продают буржуи! Раньше да, за дорого, а сейчас - нет
  7. Здравствуйте! Помогите решить головоломку =) Есть устройство, которое общается с программой на ПК. Общение происходит через немного модифицированный USB-COM. После USB-COM идет еще один переходник на базе МК с батарейкой, ограниченный по времени работы (производитель выдает "лицензию" на время). Программа на ПК о переходнике не знает (?), была написана для более старой версии устройства, которое общалось напрямую с USB-COM. Хочется этот переходник повторить. Логический анализатор показал, что линии RX и TX передаются как есть, с небольной задержкой на МК. С RTS и DTR вроде тоже понятно (указывают устройству, что подключен комп). НО есть еще один сигнал с переходника на устройство (D0 на скриншоте) - пачки импульсов с паузой в 3.051с. Длительность 1 импульса 3.054мс, длительность пачки 442.85мс. 442.85/3.054=145 бит. 1/0.003054=327.44 бит/с. Пачки разные =( Но бывают повторяющиеся последовательности. Обмен по TX/RX происходит во время этих пачек, в этот момент сигнал в 0 (но может это и совпадение, сильно мало обмена происходит). Если этот сигнал пропадает, то устройство перестает отвечать. Вот вторую последовательность привожу: 01111101000010001001000001000011101001111101111010001001000001111011101101000001 00001000100100000100001110100111110100001000110111110100001110100 Может, есть идеи, что это? Спасибо!
  8. Внимательно почитал, что делают SetCommBreak / ClearCommBreak и у меня появились сомнения =) Ехарный бабай! Оказывается снифферам не во всем можно доверять! По логам эти две команды вызывались сразу подряд, а на деле нужно выдержать паузу 10 мс! И ВСЕ :1111493779: Всем большое спасибо за помощь! Особенно UniSoft!
  9. DTR и RTS не используются. Я отпаял в кабеле все провода кроме TX, RX и GND =) SetCommBreak (hCom); ClearCommBreak (hCom); Это не дрыганье? Или нужно что-то сложнее? Завтра буду искать, чтобы почитать на эту тему. Ага =) Не знаю уже куда копать, кроме логов сниффера =( А там вроде ничего такого. Только BREAK ON-OFF перед WRITE
  10. Почти =) hCom = CreateFile( pcCommPort, GENERIC_READ | GENERIC_WRITE, 0, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING FILE_FLAG_OVERLAPPED, // hTemplate must be NULL for comm devices NULL ); Это все я понял и так... Тут выяснился вопрос. Если устройство выключить/включить, то работает и ваш вариант, и мой. Но только на один раз. Например, нужно послать команды (и получить ответ после каждой) 00 FF FF 01 F0 A6 10 47 00 FF FF 01 03 00 04 06 00 FF FF 01 F0 F0 0A 0B На первую команду устройство отвечает, а на остальные - тишина. Устройство больше не реагирует на команды от нашей проги. Нужно его выключить/включить - и оно опять работает на одну команду. Самое интересное, что фирменная прога отлично пашет даже когда железка якобы зависла (не отвечала на самописную программку). Т.е. как по мне, дело не в железке...
  11. if (!WriteFile (hCom, &command_mem_request, 8, &dwBytes, &o)) { printf ("WriteFile failed with error %d.\n", GetLastError()); return; } WriteFile failed with error 997. Сейчас попробую сам поразбираться...
  12. Прога - специфическая, для мониторинга оборудования. Она защищена HardLock донглом. Написана ногами, и наверняка на васике =) Как распаковать exe-шник от донгловского упаковщика не знаю =(
  13. [12/02/2010 22:23:32] 41636 IRP_MJ_DEVICE_CONTROL - Request operates a serial port STATUS_SUCCESS IOCTL_SERIAL_IMMEDIATE_CHAR - Request causes a specified character to be transmitted as soon as possible Попробовал с помощью нее побайтно запрос отправить - все равно устройство не отвечает. Serial Port Monitor ее как-то странно обрабатывает. Что команда есть - рисует, а в dump view (дамп принимаемых/отсылаемых байт) ничего нет. Наверное не поддерживает ее полностью =) Спасибо! Это действительно она. Правда, после посылки запроса и ClearCommError, железка не отвечает AmountInInQueue = 0 =( IOCTL_SERIAL_GET_COMMSTATUS - Request returns information about the communication status of a COM port Errors - 0 HoldReasons - 0 AmountInInQueue - 0 AmountInOutQueue - 0 EofReceived - 0 WaitForImmediate - 0 То ли порт как-то хитро инициализируется, то ли что.... =(
  14. Нет =( на GetCommState сниффер выдает IOCTL_SERIAL_GET_BAUD_RATE IOCTL_SERIAL_GET_LINE_ IOCTL_SERIAL_GET_CHARS IOCTL_SERIAL_GET_HANDFLOW GetCommModemStatus тоже не подходит =(
  15. Есть некое устройство и программа, которая общается с ним. Исходников и документации нет. Общается по 3-м проводам (GND, RX, TX). Хочется написать свою программку. Сниффинг обмена вроде бы прояснил ситуацию, протокол вроде бы понятен, но с общением есть проблемы :crying: При работе через терминальные проги железяка или молчит в ответ на запросы, или отвечает один раз и больше не реагирует. :07: Вот пример лога общения родной программы (использовал Eltima Serial Port Monitor 4, но пробовал и другие): [12/02/2010 17:19:21] 9245 IRP_MJ_CREATE - Opens a COM port (COM1) [12/02/2010 17:19:21] 9247 IOCTL_SERIAL_SET_QUEUE_SIZE - Request sets the size of the internal receive buffer InSize - 1024 OutSize - 300 [12/02/2010 17:19:21] 9249 IOCTL_SERIAL_GET_BAUD_RATE BaudRate - 9600 [12/02/2010 17:19:21] 9251 IOCTL_SERIAL_GET_LINE_CONTROL StopBits - 0 Parity - 0 WordLength - 8 [12/02/2010 17:19:21] 9253 IOCTL_SERIAL_GET_CHARS EofChar - 0 ErrorChar - 0 BreakChar - 0 EventChar - 0 XonChar - 17 XoffChar - 19 [12/02/2010 17:19:21] 9255 IOCTL_SERIAL_GET_HANDFLOW ControlHandShake - 0x1 (SERIAL_DTR_CONTROL) FlowReplace - 0x40 (SERIAL_RTS_CONTROL) XonLimit - 2048 XoffLimit - 512 Зачем-то еще раз GET_BAUDRATE, GET_LINE_CONTROL, GET_CHARS, GET_HANDFLOW [12/02/2010 17:19:21] 9265 IOCTL_SERIAL_SET_BAUD_RATE BaudRate - 9600 [12/02/2010 17:19:21] 9267 IOCTL_SERIAL_SET_RTS [12/02/2010 17:19:21] 9269 IOCTL_SERIAL_SET_DTR [12/02/2010 17:19:21] 9271 IOCTL_SERIAL_SET_LINE_CONTROL StopBits - 0 Parity - 0 WordLength - 8 [12/02/2010 17:19:21] 9273 IOCTL_SERIAL_SET_CHARS EofChar - 0 ErrorChar - 0 BreakChar - 0 EventChar - 0 XonChar - 17 XoffChar - 19 [12/02/2010 17:19:21] 9275 IOCTL_SERIAL_SET_HANDFLOW - Request sets the configuration of handshake flow control ControlHandShake - 0x1 (SERIAL_DTR_CONTROL) FlowReplace - 0x40 (SERIAL_RTS_CONTROL) XonLimit - 2048 XoffLimit - 512 Несколько десятков вот таких команд: [12/02/2010 17:19:21] 9277 IRP_MJ_DEVICE_CONTROL - Request operates a serial port STATUS_SUCCESS IOCTL_SERIAL_GET_COMMSTATUS - Request returns information about the communication status of a COM port Errors - 0 HoldReasons - 0 AmountInInQueue - 0 AmountInOutQueue - 0 EofReceived - 0 WaitForImmediate - 0 Запрос железке: [12/02/2010 17:19:23] 9347 IRP_MJ_DEVICE_CONTROL - Request operates a serial port STATUS_SUCCESS IOCTL_SERIAL_SET_BREAK_ON - Sets the line control break signal active 9349 IRP_MJ_DEVICE_CONTROL - Request operates a serial port STATUS_SUCCESS IOCTL_SERIAL_SET_BREAK_OFF - Request sets the line control break signal inactive [12/02/2010 17:19:23] 9351 IRP_MJ_WRITE - Request transfers data from a client to a COM port STATUS_SUCCESS 00 ff ff 01 f0 a6 10 47 .??.?│.G Вот тут непонятно, почему Errors = 1 - глюк программы-сниффера? [12/02/2010 17:19:23] 9353 IRP_MJ_DEVICE_CONTROL - Request operates a serial port STATUS_SUCCESS IOCTL_SERIAL_GET_COMMSTATUS - Request returns information about the communication status of a COM port Errors - 1 HoldReasons - 0 AmountInInQueue - 0 AmountInOutQueue - 0 EofReceived - 0 WaitForImmediate - 0 [12/02/2010 17:19:23] 9355 IRP_MJ_DEVICE_CONTROL - Request operates a serial port STATUS_SUCCESS IOCTL_SERIAL_GET_COMMSTATUS - Request returns information about the communication status of a COM port Errors - 0 HoldReasons - 0 AmountInInQueue - 25 AmountInOutQueue - 0 EofReceived - 0 WaitForImmediate - 0 Ну и сам ответ железки: [12/02/2010 17:19:23] 9357 IRP_MJ_READ - Transfers data from a COM port to a client STATUS_SUCCESS 00 00 00 00 01 f0 a6 10 29 99 04 50 00 00 00 00 .....?│.)T.P.... 00 00 00 00 00 00 00 00 a3 99 04 50 00 00 00 00 ........?T.P.... Дальше пара IOCTL_SERIAL_GET_COMMSTATUS IOCTL_SERIAL_SET_BREAK_ON IOCTL_SERIAL_SET_BREAK_OFF IRP_MJ_WRITE 00 ff ff 01 03 00 04 06 - запрос железке IOCTL_SERIAL_GET_COMMSTATUS IRP_MJ_READ - ответ железки ну и т.д. В winapi я не силен, попробовал накропать небольшую программенку, на основе каких-то примеров. #include <windows.h> #include <stdio.h> HANDLE hCom; char *pcCommPort = "COM1"; 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 [30]; // Зачем это - не знаю. // В логе фирменной программы была установка/снятие BREAK SetCommBreak (hCom); ClearCommBreak (hCom); // Запрос железке WriteFile (hCom, @command_mem_request, 8, &dwBytes, NULL); if (dwBytes != 8) printf ("Error!!!\n"); // Хотим ответ // По факту ничего не получаем while (1) { ReadFile (hCom, &buffer2, 0x1, &dwBytes, NULL); 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, 0, // must be opened with exclusive-access NULL, // no security attributes OPEN_EXISTING, // must use OPEN_EXISTING 0, // not overlapped I/O NULL // 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); } if (hCom != INVALID_HANDLE_VALUE && hCom != NULL) printf ("COM1 cofigured!\n"); mem_read (NULL, 0xA6F0, 0x10); return (0); } Лог сниффера: IRP_MJ_CREATE IOCTL_SERIAL_SET_QUEUE_SIZE InSize - 1024 OutSize - 300 IOCTL_SERIAL_GET_BAUD_RATE BaudRate - 9600 IOCTL_SERIAL_GET_LINE_CONTROL StopBits - 0 Parity - 0 WordLength - 8 IOCTL_SERIAL_GET_CHARS EofChar - 0 ErrorChar - 0 BreakChar - 0 EventChar - 0 XonChar - 17 XoffChar - 19 IOCTL_SERIAL_GET_HANDFLOW ControlHandShake - 0x1 (SERIAL_DTR_CONTROL) FlowReplace - 0x40 (SERIAL_RTS_CONTROL) XonLimit - 2048 XoffLimit - 512 Зачем-то еще раз GET_BAUDRATE, GET_LINE_CONTROL, GET_CHARS, GET_HANDFLOW IOCTL_SERIAL_SET_BAUD_RATE BaudRate - 9600 IOCTL_SERIAL_SET_RTS IOCTL_SERIAL_SET_DTR IOCTL_SERIAL_SET_LINE_CONTROL StopBits - 0 Parity - 0 WordLength - 8 IOCTL_SERIAL_SET_CHARS EofChar - 0 ErrorChar - 0 BreakChar - 0 EventChar - 0 XonChar - 17 XoffChar - 19 IOCTL_SERIAL_SET_HANDFLOW ControlHandShake - 0x1 (SERIAL_DTR_CONTROL) FlowReplace - 0x40 (SERIAL_RTS_CONTROL) XonLimit - 2048 XoffLimit - 512 Даем запрос устройству. IOCTL_SERIAL_SET_BREAK_ON IOCTL_SERIAL_SET_BREAK_OFF IRP_MJ_WRITE 00 ff ff 01 f0 a6 10 47 И вместо ответа вот такая ерунда в цикле: 14101 IRP_MJ_READ - STATUS_TIMEOUT Есть у кого-нибудь мысли, что я делаю не так? Какая функция winapi вызывает IOCTL_SERIAL_GET_COMMSTATUS? P.S. Прошу прощения за большой объем сообщения :laughing:
×
×
  • Создать...