ezk13 0 24 декабря, 2023 Опубликовано 24 декабря, 2023 · Жалоба Добрый день! Подскажите, уже голову сломал не могу найти где косяк: Есть плата US+, на PL-части по AXI-Stream передаются пакеты от 16 Б до 96 Б в DataMover (DM настроен на бёрст 16Б, при шине 128 бит) далее, через интерконнект шина идёт на S_AXI_HPC0_FPD и затем на PS-DDR. На baremetal PS-части по прерыванию пытаюсь писать данные из DDR в буфер: for (uint32_t valid_addr = last_addr; valid_addr < next_addr; valid_addr += 8) { payload[it] = Xil_In64(PS_DDR_BASEADDR + valid_addr); it++; } Пытался перед записью в буфер инвалидировать кэш, разными способами: Xil_DCacheInvalidateRange((UINTPTR)cacheline_addr, cacheline_len); Результат один - после N-го количества запросов виснет цинк в Xil_SyncAbortHandler() Но, при этом данные идут корректные, пока не зависнет. Комментировал код выше и оно всё равно зависает т.е. похоже дело в какой-то рассинхронизации. Что делал ещё: Активировал в DataMover кэши (AxCACHE, AxUSER) и пробросил их в цинк: /* Setting up caches for DataMover * AxCACHE[3:0] Attribute * ------------------------------------------------------------------------------------------- * | WA | RA | C | B | Description | Comments * |----|----|---|---|------------------------------------------------------------------------ * | 0 | 0 | 0 | 0 | Non-cacheable, non-bufferable | 0x0 , * | 0 | 0 | 0 | 1 | Bufferable only | 0x1 , * | 0 | 0 | 1 | 0 | Cacheable but do not allocate | 0x2 , * | 0 | 0 | 1 | 1 | Cacheable and bufferable, do not allocate | 0x3 , * | 0 | 1 | 1 | 0 | Cacheable write-through, allocate on read | 0x6 , * | 0 | 1 | 1 | 1 | Cacheable write-back, allocate on read | 0x7 , * | 1 | 0 | 1 | 0 | Cacheable write-through, allocate on write | 0xA , * | 1 | 0 | 1 | 1 | Cacheable write-back, allocate on write | 0xB , * | 1 | 1 | 1 | 0 | Cacheable write-through, allocate on both read and write | 0xE , * | 1 | 1 | 1 | 1 | Cacheable write-back, allocate on both read and write | 0xF , * * AxUSER[1:0] Attribute * 0x0 Non Shareable * 0x1 Inner Shareable * 0x2 Outer Shareable */ Пробовал разные комбинации совместно с тем, что прописано в xil_cache.h. При некоторых комбинациях проц. не зависает, но и данные не пишутся в память. Читал и делал как в AR69446 - Zynq UltraScale+ MPSoC Example Design - Use AXI HPC port to perform coherent transfers Подскажите, как-нибудь можно заставить работать подобную схему? Как правильно настроить кэширование или работать без него, если в нем проблема? Проверял на чипскопе шину S_AXI_HPC0_FPD SLVERR при записи нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться