Jump to content

    

zheka

Участник
  • Content Count

    2197
  • Joined

  • Last visited

Community Reputation

0 Обычный

About zheka

  • Rank
    Гуру

Recent Profile Visitors

6116 profile views
  1. Или я чего-то не нашел у них на сайте, или времена поменялись..... доставки дешевле 100 долларов у них нет.... Обидно. Только у них нашел нужные компоненты.
  2. Хм.... выставил Dummy cycles=6 вместо 10 получил следующее - алгоритм пишет правильно (я заглядывал в map файл и в файлы с данными), алгоритм читает правильно, основной HAL код читает правильно, не пишет вообще... А вот отключение оптимизации помогло - брейкпоинты где не надо не срабатывают. Спасибо!
  3. По ходу тогда еще один вопрос задам. Что я делаю - пытаюсь пересесть с n25q128 на w25q128. Замучившись с глюками отладки, я решил пойти по более простому пути - переучить контроллер с одной флешки на другую с использованием простого, не HALовского кода. Такой код есть в моем рукописном алгоритме для прошивки флешки. Я отпаял с дискавери флешку n25q128 и припаял w25q128. Регистры у них по даташиту немного отличаются, но минимально необходимый набор одинаков #define QSPI_PAGESIZE 256 #define IO_READ_DDR_QUAD_CMD 0xED #define IO_READ_QUAD_CMD 0xEB #define WRITE_ENABLE_CMD 0x06 #define READ_STATUS_REGISTER_CMD 0x05 #define FAST_PROGRAM_CMD 0x32 #define SECTOR_ERASE_CMD 0xD8 #define SUBSECTOR_ERASE_CMD 0x20 Процесс стирания и программирования идет, но при верификации ошибки. Я обратил внимание, что код то правильный, но смещенный. При этом HALовский код в обычном режиме читает те же значения, что и IDE в режиме memoryMapped при проверке (на приведенном выше скрине). Совпадение результатов чтения разными кодами, в разных режимах говорит о том, что чтение правильное. Проблема с записью. Где может быть затык? Микросхемы то практически одинаковые w25q128jv.pdf n25q128a.pdf
  4. Так... или я отупел за эти 3 часа.... F=0; Строку внутри условия F !=0 видите? Брейкпоинт видите? Желтый треугольник на нем видите?
  5. Среда - Keil 5. Жылезка - STM32F746G-DISCOVERY Отладчик - китайская свистулька ST-LINK (никогда не подводил!) 3 часа отлаживал, не мог понять, почему QSPI_WriteEnable возвращает ошибку. Решил поставить вопрос ребром (F=0); И тихо офигел.... Это как такое может быть? Почему срабатывает условие ? P.S. return не происходит. Нижележащий код исполняется.
  6. Скажите, а режим DualFlash - он дает двукратное преимущество в скорости или же только в объеме? Я так понял, что должен быть прирост скорости при линейном чтении, а при случайном - скажем читаем мы байт по некому адресу - нам нужно 8 бит, а читается 16 из обеих микросхем, при этом 8 нам нужны, а еще 8 бесполезны. Для того, чтоб прочесть следующий байт, контроллеру придется обратиться еще раз по тому же ФИЗИЧЕСКОМУ адресу флеши, так ведь?
  7. Спасибо! Вот это помогло QUADSPI_Cmd(DISABLE); QUADSPI_Cmd(ENABLE);
  8. Память N25Q128A Стираю сектор, пишу что-то в сектор, затем читаю его в режиме MemoryMappedMode. В этот режим загоняю контроллер так void QUADSPI_MappedMode() { QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DDRMode = QUADSPI_ComConfig_DDRMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_Ins = IO_READ_QUAD_CMD; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DummyCycles = 10; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_SIOOMode = QUADSPI_ComConfig_SIOOMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABSize = QUADSPI_ComConfig_ABSize_8bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABMode = QUADSPI_ComConfig_ABMode_NoAlternateByte; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_FMode = QUADSPI_ComConfig_FMode_Memory_Mapped; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADMode = QUADSPI_ComConfig_ADMode_4Line; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADSize = QUADSPI_ComConfig_ADSize_24bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DMode = QUADSPI_ComConfig_DMode_4Line; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_IMode = QUADSPI_ComConfig_IMode_1Line; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); } Затем хочу записать в память что-то. ИНформирован, что в MappedMode нельзя писать во флеш. Перевожу обратно, запускаю функцию WriteEnable void QSPI_WriteEnable(void) { sprintf((char *)str, "0x%08X : JUST ENTER WRITE_ENABLE_FUNCTION (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_FMode = QUADSPI_ComConfig_FMode_Indirect_Write; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DDRMode = QUADSPI_ComConfig_DDRMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_SIOOMode = QUADSPI_ComConfig_SIOOMode_Disable; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DummyCycles = 0; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABSize = QUADSPI_ComConfig_ABSize_8bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADSize = QUADSPI_ComConfig_ADSize_24bit; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DMode = QUADSPI_ComConfig_DMode_NoData; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADMode = QUADSPI_ComConfig_ADMode_NoAddress; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ABMode = QUADSPI_ComConfig_ABMode_NoAlternateByte; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_IMode = QUADSPI_ComConfig_IMode_1Line; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); sprintf((char *)str, "0x%08X : SETUP WRITE_ENABLE PARAMETRES COMPLETE (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_SetFIFOThreshold(0); QUADSPI_SetDataLength(0); sprintf((char *)str, "0x%08X : TRY WRITE ENABLE (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_Ins = WRITE_ENABLE_CMD ; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); sprintf((char *)str, "0x%08X : WAITING FOR FLAG(WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_BUSY)==SET); sprintf((char *)str, "0x%08X : WRITE ENABLE OK (WE)\r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_AutoPollingMode_Config(0x02,0x02,QUADSPI_PMM_AND); QUADSPI_AutoPollingModeStopCmd(ENABLE); QUADSPI_SetDataLength(0x00); sprintf((char *)str, "0x%08X : TRY TO SET READ (WE) \r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_FMode = QUADSPI_ComConfig_FMode_Auto_Polling; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_ADMode = QUADSPI_ComConfig_ADMode_NoAddress; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_DMode = QUADSPI_ComConfig_DMode_1Line; QUADSPI_ComConfig_InitStructure.QUADSPI_ComConfig_Ins = READ_STATUS_REGISTER_CMD; QUADSPI_ComConfig_Init(&QUADSPI_ComConfig_InitStructure); sprintf((char *)str, "0x%08X : READ IS SETTED (WE) \r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_SM)==RESET); QUADSPI_ClearFlag(QUADSPI_FLAG_SM); QUADSPI_ClearFlag(QUADSPI_FLAG_TC); while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_BUSY)==SET); sprintf((char *)str, "0x%08X : WE7 \r\n", QUADSPI_GetFMode()); HAL_UART_Transmit(&huart7, str, strlen((char *)str), 3000); } И на команде while(QUADSPI_GetFlagStatus(QUADSPI_FLAG_BUSY)==SET); которая идет после строки, где я в UART вывожу "WAITING ROF FLAG" контроллер виснет. С помощью функции QUADSPI_GetMode() я легко перевожу FMode из режима в режим, но как только он попадает в MappedMode - из него уже не переключается. Что я делаю не так?
  9. Ответ нашелся. Но он породил еще один вопрос. Оказывается нужно всего лишь передергивать затвор. USB кабель в смысле. То есть, к примеру, все работает, данные отправляются. Перепрошиваю контроллер той же прошивкой - программа запускается, но данные не отправляются. А вот если передернуть USB кабель - то отправка данных вновь возобновляется. Как с этим бороться? Понимаю, что в конечном устройстве этой проблемы не будет, но хочется освободить себя о лишних телодвижений при отладке.
  10. Контроллер STM32F103C8T6 Проект (не плюйтесь) сгенерирован в кубе под Keil. ИнициализацияUSB Да - само устройство в системе видится как COM порт, с этим проблем нет. Но при попытке что-то передать - всегда возвращается USBD_BUSY. Ну и в Терминале на компе ничего не принимается, етественно. Куда копать? Что проверить?
  11. Господа, пытаюсь создать реперную точку. Добавил на слой TOP элемент Pad, настроил Solder Expansion, Paste Expansion, осталось самое главное - клиренс между точкой и окружающей медью в 1 мм. Как это сделать? Есть вот такое видео Там автор добивается клиренса в 1 мм между реперной точкой и окружающей медью добавлением FullCircle в слой KeepOut Но у меня при редактировании FullCircle в ниспадающем списке слоев просто отсутствует KeepOut. Если же я просто перехожу на слой KeepOut и пытаюсь на нем создать круг - меня автоматом переключает в слой TOP. Пытаюсь указать клиренс в настройках самого пада Но изменение этого параметра никак не влияет на клиренс. Влияет только в том случае, если указать цепь для точки GND. Но в этом случае альтиум будет ругаться на наличие неразведенных цепей. Пытался настроить правила, создав новое персонально для этой точки. А как ее указать? Единственное, что у нее уникально - Designator. Пытался поискать в QueryHelper что-то вроде HasDesignator - нет такого. Что посоветуете?
  12. Во всяких роликах на ютубе конечно неплохо о ней отзываются, но хотелось бы послушать "живых людей". https://ru.aliexpress.com/item/YIHUA-992DA-3-In-1-Hot-Air-Rework-Soldering-Iron-Station-Smoke-Vacuum-BGA-Soldering-Station/32814010462.html?spm=a2g0o.cart.0.0.7aa73c00nB0qPR Не хотелось бы слушать тех, кто привык к ну очень профессиональному оборудованию, баксов эдак за 1000, понятно, что отзывы будут не ахти. Я вот хочу заменить свою старенькую Luckey 852D+. Что в этой станции понравилось - дымоуловитель непосредственно у жала и "спящий режим". Есть кто, имеющий опыт работы с этой станцией? Стоит она своих денег?
  13. То есть я ставлю Plain и знаю, что всякий Via, принадлежащий цепи GND, будет гарантированно соединен с этим слоем?
  14. Разобрался. Спасибо. Еще один маленький вопрос. Если я в LayerStack определяю один из слоев как Plane - что в результате происходит, как альтиум начинает относиться к этому слою, какими наделяет его "правами и обязанностями"? В частности, я так и не понял - нужно ли в этом слое рисовать Poligon Pour и назначать его цепи GND? Или это автоматом происходит. Важно ли это для получения нормальных герберов при заказе платы?