|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 12:38 am
| Автор |
Съобщение |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 STM f2 DMA
Забатачих се с SDIO контролера и нещо не мога да включа на DMA вълна... То че имах бъгове имах, ама стигнах до някъде и не мога да разбера документацията ли е кофти или аз съм толкоз тъп Значи пускам ДМА за SDIO и за удобство го пускам за всички командички дето четат данни. Не е само за при четене на сектори както в техните библиотеки. Демек дължината на трансфера може да е 8, 16 или повече байта... Но колкото и да се мъча не успявам да направя 8 байта трансфер. Сега в SDIO-то казват че трансферите трябва да са 32-битови и по 4 в бърст, айде че трябва да е 32 бита е ясно, такова им е фифото, ама защо пък задължително 4 бърстта. То един бърст излиза 16 байта, пък има команди като ACMD51 дето са си 8 байта... То между другото и ДМА-то като му гледам документацията ако трансфера е 32 битов и трезхолда трябва да е фифо фул, демек и там изглежда като че ако правя 32 битов трябва да е по 16 байта. Пробвах разни комбинации, общо взето резултатът е, че данните от SDIO-то винаги изчезват, дори да изключа DMA-то пак някъде изчезват в смисъл DCOUNT си стои нула и фифото като че ли е празно. Хайде да кажем че индикацията им нещо куца, понеже според прекъсванията изглежда като да е получило данните и всичко да е ОК. От страна на ДМА-то обаче как си ъпдейтва регистрите напрово е пълна загадка. В смисъл аз пробвах всякакви комбинации с различни бърстове, с включено/изключено фифо на дма-то и т.н. И общо взето не винаги показва правилно. Има ситуации в които прави един 32-бито трансфер, а не го отразява. Има ситуации в които пък показва че е направило трансфер, а пък реално към паметта поне няма такъв. Изобщо пълна лудница. Проблемът е че в нито една ситуация не мога да го накарам да направи трансфер на 8 байта, т.е. 2*32 бита... както и да го програмирам 
|
| Пет Окт 25, 2013 12:07 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
Не мога да ги разбера тия ST... За DMA-то пишат: а в SDIO-то казват:
|
| Пет Окт 25, 2013 12:27 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
 Re: STM f2 DMA
Здравей! Темата за скапаното DMA2 на ST е обширна, но направо ти казвам няма да ти хареса (виж им ератата), особено като знам, че няма да се задоволиш с ограничаване броя използвани DMA канали. Проблемите са решени едва в STM32F42xx и STM32F43xx. А STM32F2 серията направо са я изоставили, така, че там е загубена битка. ето ти малко теми за размисъл: https://my.st.com/public/STe2ecommuniti ... tviews=636http://blog.frankvh.com/2012/01/13/stm3 ... nsactions/https://my.st.com/public/STe2ecommuniti ... ?tags=SDIO
|
| Пет Окт 25, 2013 2:58 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
Това с ератата го бях забравил... в случая не мисля че ме касае. Аз изобщо не мога да направя трансфер от 8 байта от SDIO чрез смотаното DMA...
Пък може и да има връзка, аз вече не знам как да им чета документацията на тия кретени... В ератата пише "When the DMA2 is managing AHB Peripherals (only peripherals embedding FIFOs) and also APB transfers in a concurrent way". Аз не ползвам все още нито една AHB периферия, съответно както и да превеждам AND-а не би трябвало да се отнася тая ситуация... От друга страна оня дето го открил бъга пише че ползва 2 APB (SDIO, ADC) и една AHB (DCMI) и ако пусне кои да е две имал проблеми..
Но както и да е, при мен си мисля че е друго...
|
| Пет Окт 25, 2013 3:40 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
 Re: STM f2 DMA
Друго, друго, ти пълъпи на всички SDIO пиновете сложи ли? 
|
| Пет Окт 25, 2013 4:00 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
това пък защо? и каква връзка може да има с ДМА–то?
|
| Пет Окт 25, 2013 4:16 pm |
|
 |
|
fan
Ранг: Почетен член
Регистриран на: Съб Окт 13, 2007 12:12 pm Мнения: 712
|
 Re: STM f2 DMA
Да речем, характерни особености на SDIO-то на STM-ките, иначе проблеми. 
|
| Пет Окт 25, 2013 4:19 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
ми имам на DAT0-2 и CMD, нямам на CLK щото предполага се че е push-pull а защо нямам на DAT3 не помня... може би щото картата трябва да има на тая линия, или съм го преписал отнякъде  Въпросът е, че проблемът ми е изцяло свързан с DMA. Поне така си мисля. За съжаление нещо не мога с brute force да им хвана логиката как правят заявките. Примерно слагам PBURST = 0, което означава че DMA-то ще може да трансферира на една дума (32-бит) стига SDIO-то да направи заявка. Явно прави една заявка, защото първата дума се вижда, след което ДМА-то седи и чака, а пък SDIO-то показва че има данни във фифото си. Слагам PBURST=4, което означава че ДМА-то би трябвало да изчете 4 думи наведнъж... Тъй като преди това съм програмирал картата на 8 байта (2 думи) няма откъде да дойдат 4 думи. Но въпреки всичко става някакъв трансфер, само дето пак не е наред. Тук зависи как съм програмирал мемори страната на ДМА-то. Ако сложа MBURST=4 - дма-то показва че е направило 1 трансфер но реално го е направило само към собственото си фифо, в паметта няма нищо... Слагам MBURST=0 и фифо трезхолд =1/4. В паметта виждам че е получена 1 дума. ДМА-то отново показва 1 трансфер и неговото фифо е празно. Но пък SDIO фифото не е празно, явно там е останала втората дума. Нямам абсолютно никакво обяснение защо след като PBURST=4 то прави само 1 дума трансфер и защо не прави втората... С две думи не откривам никаква логика... или нещо тотално съм се омотал, или тия ST са направили голяма чудесия. Все пак си мисля че комуникацията с картата е ОК. Най-малкото както казах идва интеръпт че е получен блока с данни успешно и се предполага че CRC-то на данните е наред. Пък и самите данни са или в SDIO-то или в DMA-то, само дето не мога да ги накрам да дойдат при мен 
|
| Пет Окт 25, 2013 4:54 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
взе че тръгна  бях забравил да сетна флоу контрола да е от DMA-то а не от периферията. Иначе продължава да не зависи много-много от това как програмирам ДМА-то. Бачка и с burst 0 и 4, a пък ДМА-брояча става минус 2. Няма значение, важното е че данните стигат до паметта ми 
|
| Пет Окт 25, 2013 5:55 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: STM f2 DMA
Миро, разбра ли го всъщност как работи това DMA в BURST режим с FIFO?
Аз конкретно имам следния казус - трансфер по SPI двупосочно. И на RX и на TX съм пуснал DMA, като на приемния съм сложил прекъсване на TCIF. Ако разреша FIFO-то на DMA-то, това какво значи за приемния(RX) канал? Ако да кажем съм му сетнал трешолда на половинаta от размера, то докато не се запълни наполовина няма да прехвърли данни към паметта, така ли? А ако общия брой байтове зададен за трансфер е по-малък от половината фифо? Ще си седят вътре во-веки, без да получа прекъсване от TCIF ли?Чета, има механизъм за флъшване, ама той предполага, че вече съм сигнализиран някак си, а аз искам то (ДМА-то на приемния канал) да ме сигнализира през TCIF.
Като цяло при трансфер от паметта към периферията, FIFO-то ми се връзва логично в главата, ама от периферия към памет... никак.
Нещо глупаво ми се види, май аз не го разбирам като хората, а?
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
Последна промяна Цецо на Чет Ное 28, 2013 4:48 pm, променена общо 1 път
|
| Чет Ное 28, 2013 4:14 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
Това, което разбрах е че тая логика с бърстовете и фифотата се променя, в зависимост от това кой командва парада.
Би трябвало да е валидна когато ДМА-то е мастера. Само че в случая с SDIO-то как ли не го мъчех, не стана... явно за да не артисват данни ония са го набъзикали и то правеше каквото си иска в ролята на мастер. Когато SDIO-то е мастер всичко бачка. Друг е въпросът че и докумантацията е... В SDIO те карат да програмираш DMA-то по начин, който противоричи на документацията на самото DMA.
Както и да е, за SPI го ползвам без бърст (single transfer) и не съм си играл повече... Не искам да те подведа как ще се държи...
|
| Чет Ное 28, 2013 4:46 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: STM f2 DMA
А на SPI ползваш ли FIFO? Щото аз това дето не го разбирам е осоновно във FIFO логиката, BURSTA просто слага още кал в блатото.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Ное 28, 2013 4:49 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
да, ползвам го, демек сложил съм дисейбъл на дайрект мода...
|
| Чет Ное 28, 2013 4:57 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
 Re: STM f2 DMA
Е добре де как работи FIFO-то в режим от периферия към памет? Нещо не мога да го вдена на хартия описано. Начи нагласям някакъв трешолд (да кажем равносилен на 8 байта). Нагласям го примерно за трансфер на 4 байта и го пускам. От периферията почват да влизат данни и се наместват във фифото. Ама те са 4 броя, остават си там, щото не стигат трешолда, демек не се флъшват към паметта. Кой ще ми сигнализира, че 4те байта трансфер са приключили?
Начи това би следвало да работи, ако брояча за трансфери е преди фифото. Тогава той ще ми дигне TCIF след 4тия, аз ще забраня ДМА канала и той ще се флъшне към паметта. Ама това пък би могло да предизвика конфликт, щото ако бързо пробвам да аксесвам данните, може още да ги няма в паметта. Тук би трябвало да сработи бърста и да зключи AHB шината към DMA-то докато не си изпразни фифото. Тъй ли?
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Чет Ное 28, 2013 5:03 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: STM f2 DMA
Не ми се ще много да говоря без детайлно да съм прочел и пробвал. Това е ST мамка му.... и само с гола логика как би трябвало да е - не става. Все пак... Като му кажеш да е бърст би трябвало да трансферира на бърстове (освен при флъшване ако се прави изключение) Като му кажеш че тряба да работи с тресхолд, значи трябва да чака тресхолда. (освен при флъшване...) Нещо ме гложди че нямаха автоматичен флъш, дамек като му кажеш 8 байта тресхолд, от страна на периферията ще почне да чете когато има място за поне 8. Да кажем както в примера ти изчита 4. От другата стана ако пак с тресхолд 8, ще чака... и тия 4 байта ще ти седят във фифото като прани гащи. То отде да знае че няма да има повече  Така си мисля... ама пак ти казвам че с ST мразя да спекулирам 
|
| Чет Ное 28, 2013 5:19 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|