Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

STM f2 DMA
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11854
Страница 1 от 2

Автор:  miro_atc [ Пет Окт 25, 2013 12:07 pm ]
Заглавие:  STM f2 DMA

Забатачих се с SDIO контролера и нещо не мога да включа на DMA вълна... То че имах бъгове имах, ама стигнах до някъде и не мога да разбера документацията ли е кофти или аз съм толкоз тъп :evil:

Значи пускам ДМА за SDIO и за удобство го пускам за всички командички дето четат данни. Не е само за при четене на сектори както в техните библиотеки. Демек дължината на трансфера може да е 8, 16 или повече байта... Но колкото и да се мъча не успявам да направя 8 байта трансфер.

Сега в SDIO-то казват че трансферите трябва да са 32-битови и по 4 в бърст, айде че трябва да е 32 бита е ясно, такова им е фифото, ама защо пък задължително 4 бърстта. То един бърст излиза 16 байта, пък има команди като ACMD51 дето са си 8 байта... То между другото и ДМА-то като му гледам документацията ако трансфера е 32 битов и трезхолда трябва да е фифо фул, демек и там изглежда като че ако правя 32 битов трябва да е по 16 байта.

Пробвах разни комбинации, общо взето резултатът е, че данните от SDIO-то винаги изчезват, дори да изключа DMA-то пак някъде изчезват в смисъл DCOUNT си стои нула и фифото като че ли е празно. Хайде да кажем че индикацията им нещо куца, понеже според прекъсванията изглежда като да е получило данните и всичко да е ОК.
От страна на ДМА-то обаче как си ъпдейтва регистрите напрово е пълна загадка. В смисъл аз пробвах всякакви комбинации с различни бърстове, с включено/изключено фифо на дма-то и т.н. И общо взето не винаги показва правилно. Има ситуации в които прави един 32-бито трансфер, а не го отразява. Има ситуации в които пък показва че е направило трансфер, а пък реално към паметта поне няма такъв. Изобщо пълна лудница.
Проблемът е че в нито една ситуация не мога да го накарам да направи трансфер на 8 байта, т.е. 2*32 бита... както и да го програмирам :?

Автор:  miro_atc [ Пет Окт 25, 2013 12:27 pm ]
Заглавие:  Re: STM f2 DMA

Не мога да ги разбера тия ST...

За DMA-то пишат:

Цитат:
Note: The Burst mode is allowed only when incremetation is enabled:
– When the PINC bit is at ‘0’, the PBURST bits should also be cleared to ‘00’


а в SDIO-то казват:

Цитат:
c) Program DMA2_Stream3 or DMA2_Stream6 Channel4 control register (memory
increment, not peripheral increment, peripheral and source width is word size).
d) Program DMA2_Stream3 or DMA2_Stream6 Channel4 to select the peripheral as
flow controller (set PFCTRL bit in DMA_S3CR or DMA_S6CR configuration
register).
e) Configure the incremental burst transfer to 4 beats (at least from peripheral side)
in DMA2_Stream3 or DMA2_Stream6 Channel4.

Автор:  fan [ Пет Окт 25, 2013 2:58 pm ]
Заглавие:  Re: STM f2 DMA

Здравей!
Темата за скапаното DMA2 на ST е обширна, но направо ти казвам няма да ти хареса (виж им ератата), особено като знам, че няма да се задоволиш с ограничаване броя използвани DMA канали.
Проблемите са решени едва в STM32F42xx и STM32F43xx. А STM32F2 серията направо са я изоставили, така, че там е загубена битка.
ето ти малко теми за размисъл:
https://my.st.com/public/STe2ecommuniti ... tviews=636

http://blog.frankvh.com/2012/01/13/stm3 ... nsactions/
https://my.st.com/public/STe2ecommuniti ... ?tags=SDIO

Автор:  miro_atc [ Пет Окт 25, 2013 3:40 pm ]
Заглавие:  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) и ако пусне кои да е две имал проблеми..

Но както и да е, при мен си мисля че е друго...

Автор:  fan [ Пет Окт 25, 2013 4:00 pm ]
Заглавие:  Re: STM f2 DMA

Друго, друго, ти пълъпи на всички SDIO пиновете сложи ли? :)

Автор:  miro_atc [ Пет Окт 25, 2013 4:16 pm ]
Заглавие:  Re: STM f2 DMA

това пък защо? и каква връзка може да има с ДМА–то?

Автор:  fan [ Пет Окт 25, 2013 4:19 pm ]
Заглавие:  Re: STM f2 DMA

Да речем, характерни особености на SDIO-то на STM-ките, иначе проблеми. :)

Автор:  miro_atc [ Пет Окт 25, 2013 4:54 pm ]
Заглавие:  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-то, само дето не мога да ги накрам да дойдат при мен ;-)

Автор:  miro_atc [ Пет Окт 25, 2013 5:55 pm ]
Заглавие:  Re: STM f2 DMA

взе че тръгна ;-)

бях забравил да сетна флоу контрола да е от DMA-то а не от периферията. Иначе продължава да не зависи много-много от това как програмирам ДМА-то. Бачка и с burst 0 и 4, a пък ДМА-брояча става минус 2. Няма значение, важното е че данните стигат до паметта ми ;-)

Автор:  Цецо [ Чет Ное 28, 2013 4:14 pm ]
Заглавие:  Re: STM f2 DMA

Миро, разбра ли го всъщност как работи това DMA в BURST режим с FIFO?

Аз конкретно имам следния казус - трансфер по SPI двупосочно. И на RX и на TX съм пуснал DMA, като на приемния съм сложил прекъсване на TCIF. Ако разреша FIFO-то на DMA-то, това какво значи за приемния(RX) канал? Ако да кажем съм му сетнал трешолда на половинаta от размера, то докато не се запълни наполовина няма да прехвърли данни към паметта, така ли? А ако общия брой байтове зададен за трансфер е по-малък от половината фифо? Ще си седят вътре во-веки, без да получа прекъсване от TCIF ли?Чета, има механизъм за флъшване, ама той предполага, че вече съм сигнализиран някак си, а аз искам то (ДМА-то на приемния канал) да ме сигнализира през TCIF.

Като цяло при трансфер от паметта към периферията, FIFO-то ми се връзва логично в главата, ама от периферия към памет... никак.

Нещо глупаво ми се види, май аз не го разбирам като хората, а?

Автор:  miro_atc [ Чет Ное 28, 2013 4:46 pm ]
Заглавие:  Re: STM f2 DMA

Това, което разбрах е че тая логика с бърстовете и фифотата се променя, в зависимост от това кой командва парада.

Би трябвало да е валидна когато ДМА-то е мастера. Само че в случая с SDIO-то как ли не го мъчех, не стана... явно за да не артисват данни ония са го набъзикали и то правеше каквото си иска в ролята на мастер. Когато SDIO-то е мастер всичко бачка. Друг е въпросът че и докумантацията е... В SDIO те карат да програмираш DMA-то по начин, който противоричи на документацията на самото DMA.

Както и да е, за SPI го ползвам без бърст (single transfer) и не съм си играл повече... Не искам да те подведа как ще се държи...

Автор:  Цецо [ Чет Ное 28, 2013 4:49 pm ]
Заглавие:  Re: STM f2 DMA

А на SPI ползваш ли FIFO? Щото аз това дето не го разбирам е осоновно във FIFO логиката, BURSTA просто слага още кал в блатото.

Автор:  miro_atc [ Чет Ное 28, 2013 4:57 pm ]
Заглавие:  Re: STM f2 DMA

да, ползвам го, демек сложил съм дисейбъл на дайрект мода...

Автор:  Цецо [ Чет Ное 28, 2013 5:03 pm ]
Заглавие:  Re: STM f2 DMA

Е добре де как работи FIFO-то в режим от периферия към памет? Нещо не мога да го вдена на хартия описано. Начи нагласям някакъв трешолд (да кажем равносилен на 8 байта). Нагласям го примерно за трансфер на 4 байта и го пускам. От периферията почват да влизат данни и се наместват във фифото. Ама те са 4 броя, остават си там, щото не стигат трешолда, демек не се флъшват към паметта. Кой ще ми сигнализира, че 4те байта трансфер са приключили?

Начи това би следвало да работи, ако брояча за трансфери е преди фифото. Тогава той ще ми дигне TCIF след 4тия, аз ще забраня ДМА канала и той ще се флъшне към паметта. Ама това пък би могло да предизвика конфликт, щото ако бързо пробвам да аксесвам данните, може още да ги няма в паметта. Тук би трябвало да сработи бърста и да зключи AHB шината към DMA-то докато не си изпразни фифото. Тъй ли?

Автор:  miro_atc [ Чет Ное 28, 2013 5:19 pm ]
Заглавие:  Re: STM f2 DMA

Не ми се ще много да говоря без детайлно да съм прочел и пробвал. Това е ST мамка му.... и само с гола логика как би трябвало да е - не става.


Все пак...

Като му кажеш да е бърст би трябвало да трансферира на бърстове (освен при флъшване ако се прави изключение)
Като му кажеш че тряба да работи с тресхолд, значи трябва да чака тресхолда. (освен при флъшване...)

Нещо ме гложди че нямаха автоматичен флъш, дамек като му кажеш 8 байта тресхолд, от страна на периферията ще почне да чете когато има място за поне 8. Да кажем както в примера ти изчита 4. От другата стана ако пак с тресхолд 8, ще чака... и тия 4 байта ще ти седят във фифото като прани гащи. То отде да знае че няма да има повече ;-)

Така си мисля... ама пак ти казвам че с ST мразя да спекулирам ;-)

Страница 1 от 2 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/