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

adnega

Свой
  • Постов

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

  • Посещение

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

    3

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


  1. Сам сейчас в фоне лекции разные слушаю. Обещают много, но изделия если и есть, то все энтузиастские.
  2. Конечно, нужно на Си. Вариант, rust для МК вообще первый раз слышу - не понятно откуда именно такой выбор взялся. Еще варианты: ASM, Питон, Скретч, Форт, Лисп.
  3. В самом первом сообщении ТС - транспортное средство. Сейчас будем "пытать" ТС на тему что ему надо - может, какая-то и будет достаточно. Повторюсь, CAN-шлюз специфичная и не актуальная задача. Разумеется нет. Меня насторожило, что вы все годные предложения отметаете, ссылаетесь на свое изделие, и при этом не обещаете, что оно поможет в "раскуривании" темы. У меня (пользуясь молчанием ТС) вопрос к Eddy_Em: вы сделали преобразователь CAN-UART. У вас какой-то свой протокол или есть что-то стандартное? Меня CAN-преобразователь интересует в варианте CAN-WIFI (на ESP32) - думаю свой делать протокол обмена или какой-то общепринятый реализовать.
  4. А зачем вообще CAN-шлюз в авто-диагностике? По-моему, это какое-то несправедливое требование. Приемный фильтр по CAN поддерживается. Можно принимать и отправлять J1939 сообщения, следовательно, эмуляция какая-то тоже возможна. Я в этом не так сильно уверен, как вы. У вас с ТС IP не совпадают? Вопрос к ТС: вы указали два прибора для макета. Можете предоставить документацию на эти приборы в части CAN-протокола?
  5. Этого мало. Я делал преобразователь modbus-регистров в входящие и исходящие пакеты по протоколам J1939 и UDS. Нужно работать на уровне протокола, а не пакетов CAN. Кста, первая версия была как раз на F042, затем переехал на F303 для унификации номенклатуры в компании. ELM327 не умеет отправлять: Еще как умеет, причем, на уровне протокола, а не пакетов CAN. PS. ТС подозрительно молчалив. Очередной тролль?
  6. Именно по этому я и советую ELM327 - там по крайне мере какое-то ПО есть и какие-то базы идентификаторов. Пораскуривать в режиме читателя, а там, может, и не захочется дальше что-то делать ;)
  7. У нас (из готового) тоже много чего есть ;) А описания автомобильных протоколов и базы идентификаторов переменных разных блоков управления у вас есть? Просто отправлять/принимать CAN пакеты - это даже близко не похоже на "раскуривание".
  8. Для "расскуривания" в части транспортных средств. Есть что-то лучше? Судя по вашим ответам, у вас есть какое-то конкретное знание и какое-то конкретное решение. Интересно. PS. Я после последних тем, где новичок просит что-то посоветовать для старта, стараюсь быть бдительным и другим советую.
  9. Смущает (т.к. G070): вроде, страница 2 кБ и писать нужно по 8 байт Я так понял, что там ECC, поэтому дозаписывать в пределах 8 байт уже не получится. Ну и про 8, 16 бит явно написано, что будет ошибка. И отсутствие выравнивания на границу двойного слова (8 байт) - тоже ошибка.
  10. Да, т.к. указатель на DWORD, то скакать будет по 8 байт. Я сравниваю записанные данные с источником. Если записалось не то, что записывали, то выход с ошибкой. У вас RCC_AHBENR_FLASH в RCC->AHBENR установлен?
  11. У меня на этом камне такой код работает (правда, у меня в библиотеке номер бита, а не маска). //----------------------------------------------------------------------------- // int flash_write(const void *dst, const void *src, const DWORD size) //----------------------------------------------------------------------------- int flash_write(const void *dst, const void *src, const DWORD size) { DWORD *w_dst = (DWORD *)dst; DWORD *w_src = (DWORD *)src; if(FLASH->CR & (1 << FLASH_CR_LOCK)) { FLASH->KEYR = KEY1; FLASH->KEYR = KEY2; } while(FLASH->SR & (1 << FLASH_SR_BSY1)); FLASH->SR = 0 | (1 << FLASH_SR_OPERR) | (1 << FLASH_SR_PROGERR) | (1 << FLASH_SR_WRPERR) | (1 << FLASH_SR_PGAERR) | (1 << FLASH_SR_SIZERR) | (1 << FLASH_SR_PGSERR) | (1 << FLASH_SR_MISSERR) | (1 << FLASH_SR_FASTERR) | (1 << FLASH_SR_OPTVERR); for(int i = 0; i < size / sizeof(DWORD) / 2; i++) { FLASH->CR = (1 << FLASH_CR_PG); w_dst[0] = w_src[0]; w_dst[1] = w_src[1]; while((FLASH->SR) & (1 << FLASH_SR_BSY1)); if((w_dst[0] != w_src[0]) || (w_dst[1] != w_src[1])) return FLASH_RESULT_ERROR; w_dst += 2; w_src += 2; } return FLASH_RESULT_OK; } //----------------------------------------------------------------------------- // void flash_erase(const DWORD start, const DWORD size) //----------------------------------------------------------------------------- void flash_erase(const DWORD start, const DWORD size) { if(FLASH->CR & (1 << FLASH_CR_LOCK)) { FLASH->KEYR = KEY1; FLASH->KEYR = KEY2; } while(FLASH->SR & (1 << FLASH_SR_BSY1)); FLASH->SR = 0 | (1 << FLASH_SR_OPERR) | (1 << FLASH_SR_PROGERR) | (1 << FLASH_SR_WRPERR) | (1 << FLASH_SR_PGAERR) | (1 << FLASH_SR_SIZERR) | (1 << FLASH_SR_PGSERR) | (1 << FLASH_SR_MISSERR) | (1 << FLASH_SR_FASTERR) | (1 << FLASH_SR_OPTVERR); for(int i = (start / FLASH_PAGE_SIZE); i < ((start + size) / FLASH_PAGE_SIZE); i++) { FLASH->CR = (1 << FLASH_CR_PER) + (i << FLASH_CR_PNB); FLASH->CR = (1 << FLASH_CR_PER) + (i << FLASH_CR_PNB) + (1 << FLASH_CR_STRT); while(FLASH->SR & (1 << FLASH_SR_BSY1)); } } У вас тут FLASH->CR |= (62<<FLASH_CR_PNB_Pos); // Задаем её адрес точно нули в регистре, чтобы без очистки биты только устанавливать?
  12. В документации пример передачи параметров на сервер через POST.
  13. Требуется внимательность в квадрате, ибо таблица не полная, а поэтому не Y = X2, а Y = X2 * ~X3
  14. Y1 = (~X1 * X2 * ~X3) + (X1 * X2 * ~X3) - т.е. элемент ИЛИ у вас должен быть двухвходовый, а не трехвходовый. и можно упростить до Y1 = X2 * ~X3.
  15. У AND3(inst1) первый вход pin1, а второй ~pin1. Это всегда 0 - поэтому не имеет смысла, и значит у вас где-то ошибка.
  16. Я вас уже третий раз прошу ответить по теме: что именно заказали?
  17. Дык, это замечательно! Может, ваш выбор кому-то поможет, например, мне.
  18. А что именно, если не секрет?
  19. Сам столкнулся с похожей проблемой: хочу показать программирование МК ребенку, у меня железок разных много, а так, чтобы как в детстве - пережигать галетником РЕ3 - ничего толком и нет. Самое близкое к тому, что бы я хотел - делает Ben Eater - советую посмотреть, если с английским нет проблем. Кста, озвучьте максимальный бюджет, чтоб примерно понимать, что советовать.
  20. У меня есть партия плат от Резонита, где маска имеет размер такой же как и заливка медью. Косяк мой, но Резонит изготовил явный брак не связавшись с разработчиком. Прекрасно понимаю ваши чувства, но это жизнь. JLCPCB с вами очень вежливы, я после разговора с начальником отдела качества Резонита еще неделю ходил обтекал. С тех пор всегда изучаю гербера перед отправкой кому-либо, и считаю это нормой.
  21. Наконец-то появилось описание Two wire Automotive Interface (TWAI) в документации версии 4.4
  22. МК для изучения выбран не очень популярный. По STM32 информации много, например, "Мартин М. Инсайдерское руководство по STM32". Из Cortex-M-книг я бы рекомендовал "Джозеф Ю. Ядро Cortex-M3 компании ARM. Полное руководство". ТС, опишите что именно вы изучаете и зачем? Почему asm, а не Си? Почему именно K1986BE92QI? Какой у вас вообще уровень в программировании?
×
×
  • Создать...