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

adnega

Свой
  • Постов

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

  • Посещение

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

    3

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


  1. Смущает (т.к. G070): вроде, страница 2 кБ и писать нужно по 8 байт Я так понял, что там ECC, поэтому дозаписывать в пределах 8 байт уже не получится. Ну и про 8, 16 бит явно написано, что будет ошибка. И отсутствие выравнивания на границу двойного слова (8 байт) - тоже ошибка.
  2. Да, т.к. указатель на DWORD, то скакать будет по 8 байт. Я сравниваю записанные данные с источником. Если записалось не то, что записывали, то выход с ошибкой. У вас RCC_AHBENR_FLASH в RCC->AHBENR установлен?
  3. У меня на этом камне такой код работает (правда, у меня в библиотеке номер бита, а не маска). //----------------------------------------------------------------------------- // 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); // Задаем её адрес точно нули в регистре, чтобы без очистки биты только устанавливать?
  4. В документации пример передачи параметров на сервер через POST.
  5. Требуется внимательность в квадрате, ибо таблица не полная, а поэтому не Y = X2, а Y = X2 * ~X3
  6. Y1 = (~X1 * X2 * ~X3) + (X1 * X2 * ~X3) - т.е. элемент ИЛИ у вас должен быть двухвходовый, а не трехвходовый. и можно упростить до Y1 = X2 * ~X3.
  7. У AND3(inst1) первый вход pin1, а второй ~pin1. Это всегда 0 - поэтому не имеет смысла, и значит у вас где-то ошибка.
  8. Я вас уже третий раз прошу ответить по теме: что именно заказали?
  9. Дык, это замечательно! Может, ваш выбор кому-то поможет, например, мне.
  10. А что именно, если не секрет?
  11. Сам столкнулся с похожей проблемой: хочу показать программирование МК ребенку, у меня железок разных много, а так, чтобы как в детстве - пережигать галетником РЕ3 - ничего толком и нет. Самое близкое к тому, что бы я хотел - делает Ben Eater - советую посмотреть, если с английским нет проблем. Кста, озвучьте максимальный бюджет, чтоб примерно понимать, что советовать.
  12. У меня есть партия плат от Резонита, где маска имеет размер такой же как и заливка медью. Косяк мой, но Резонит изготовил явный брак не связавшись с разработчиком. Прекрасно понимаю ваши чувства, но это жизнь. JLCPCB с вами очень вежливы, я после разговора с начальником отдела качества Резонита еще неделю ходил обтекал. С тех пор всегда изучаю гербера перед отправкой кому-либо, и считаю это нормой.
  13. Наконец-то появилось описание Two wire Automotive Interface (TWAI) в документации версии 4.4
  14. МК для изучения выбран не очень популярный. По STM32 информации много, например, "Мартин М. Инсайдерское руководство по STM32". Из Cortex-M-книг я бы рекомендовал "Джозеф Ю. Ядро Cortex-M3 компании ARM. Полное руководство". ТС, опишите что именно вы изучаете и зачем? Почему asm, а не Си? Почему именно K1986BE92QI? Какой у вас вообще уровень в программировании?
  15. Так можно передать значения для 32-битного регистра непосредственно в команде. Видимо, опечатка. Или это порт E, или младшие 16 бит должны быть нулевые. ASM принципиально нужен? На Си все гораздо проще.
  16. Неделю назад делал эмулятор советских УМС на тини10 по этому алгоритму. Не думаю, что для FPGA вычитание числа будет существенной растратой ресурсов, только если там не тысячи подобных каналов и/или не огромные частоты работы.
  17. Может, вместо count2 <= 0; правильнее count2 <= count2 - count1; ?
  18. У большинства управление активным нулем. Для формирования фронта, возможно, потребуется дополнительная обвязка. У большинства управление активным нулем. Для формирования фронта, возможно, потребуется дополнительная обвязка. 74LVC1G74DP,125, Одиночный D-триггер [TSSOP-8] [SOT-505] NL17SZ74USG, Один D-триггер с установкой и сбросом, [US-8]
  19. Вроде, это обычный RS-триггер. Насколько маленьким должно быть решение? SO-14 пойдет?
  20. Попробуйте Ctrl+L (вырезать строку), Ctrv+V (вставить)
  21. Я на вход АЦП для сигналов с большим выходным сопротивлением ставлю керамику 100нФ на землю.
  22. Вроде, в настройках сетевой карты можно установить подсчет контрольной суммы IPv4
  23. UDP передается поверх IP, а ICMP это даже не IP. ICMP это очень богатая сущность, а не только ping.
  24. Это не принудительная блокировка, а свойство ограниченности диапазона IP-адресов. Когда модуль соединяется с сервером по TCP ему выдают не IP-адрес, а пару IP-ПОРТ (сокет). Оператор маршрутизирует пакеты, приходящие на этот сокет (IP-ПОРТ) до вашего модуля. На соседнем порту этого же IP-адреса может быть совершенно другое соединение для совершенно случайного клиента. Возможно, раньше выдавали временный IP-адрес вместо пары IP-ПОРТ - поэтому могло и работать. Если AT+CIFSR выдает IP, который отличается от того, с которого вам прилетает соединение на сервер (и скорее всего, он будет какой-нить 10.х.х.х), то с большой долей вероятности (скорее, 100%) соединения у вас будут через NAT.
×
×
  • Создать...