STM32F103 ile 40MB lik veri okunabilir mi?

Başlatan XX_CİHAN_XX, 19 Kasım 2014, 21:54:39

XX_CİHAN_XX

STM32F103 kullanarak saniyede 40 milyon byte per second 'lık bir data stream akışını GPIO portundan okuyup istediğim dataları bu stream içinden süzme şansım var mıdır? STM32F407 ile FSMC yada herhangi bir bufferlama kullanmadan bu işi yapabiliyorum. CM3 ile de yapılabilir mi?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

CLR

Saniyede 40MBPS, yani 40Mhz'de byte akışı olacak, bu gerçeklenebilir ama data maskeleme olayın muhtemelen işi bozabilir. Maskeleme işini nasıl yapıyorsun bilemediğimden soruna cevap vermek zor. Her byte mı karşılaştırıyorsun veya
kaç değerle karşılaştırıyorsun hiçbirşey belli değil.

Sanırım F407'de portan okuyorsun sonra karşılaştırma/maskeleme işlemini yapıyorsun, bu mantıkla aynısını CM3'ye yaparsan büyük ihtimalle yetişmez diye düşünüyorum, overclock yaparsan belki olabilir. Başka yapma yöntemleride var ama bufferlama istemiyorsun.
Knowledge and Experience are Power

kralsam

Alıntı yapılan: XX_CİHAN_XX - 19 Kasım 2014, 21:54:39
STM32F103 kullanarak saniyede 40 milyon byte per second 'lık bir data stream akışını GPIO portundan okuyup istediğim dataları bu stream içinden süzme şansım var mıdır? STM32F407 ile FSMC yada herhangi bir bufferlama kullanmadan bu işi yapabiliyorum. CM3 ile de yapılabilir mi?
Hocam yanlış hatırlamıyorsam GPIO lar 48MHz den sonra saturasyona giriyor. Fakat işlemci çalışmasında sanırım bir sorun yok. PLL değerini epey yükseltsem de ısınma görmemiştim. Ama GPIO çalışmadıktan sonra emin olamayız sanırım. @CLR 'ın dediği gibi yapacağın işlemede bağlı tabi. Ancak ben yapılabilir görmüyorum. Yada çok düşük bir ihtimal.

mufitsozen

Alıntı yapılan: XX_CİHAN_XX - 19 Kasım 2014, 21:54:39
STM32F103 kullanarak saniyede 40 milyon byte per second 'lık bir data stream akışını GPIO portundan okuyup istediğim dataları bu stream içinden süzme şansım var mıdır? STM32F407 ile FSMC yada herhangi bir bufferlama kullanmadan bu işi yapabiliyorum. CM3 ile de yapılabilir mi?

40 milyon byte per second  320 Milyon bit per second yapar. Sayilardan eminmisiniz?
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

XX_CİHAN_XX

@mufitsözen hocam sayılardan eminim bit rate olarak hesaplama yapmayın çünkü data 8 bit paralel formda geliyor.
@CLR hocam her bir baytı karşılaştırma yapmam lazım. F4 ile IDR registeri üzerinden doğrudan veri alarak her bir veri üzerinde karşılaştırma yapıyordum.
Anladığım kadarıyla F1 için mevcut IO hızı bu şekilde bir kullanıma müsait değil peki bufferlama yapsak FSMC nin bir kolaylığı olabilir mi harici bir ram kullanmadan yapabilir miyiz?
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

CLR

Dma ile porttan buffer'a okuyup sonra karşılaştırma yapabilirsin, karşılaştırma yaparken dma yeni bilgileri okur, işlemcinin ram'inde mesela 1000byte'lık alan ayır, dma ile portu paralel oku sonra dma transfer complete olunca karşılaştırmaya başla, tabi burada muhtemelen şöyle bir sorunun çıkacak dma senin karşılaştırma işlemlerinden daha hızlı işlemleri bitirecek, senin işlemlerin bitmeden dma'ı tekrar aktif etmemelisin veya 2 buffer kullanmalısın. Orada bazı ayarlar çekmen gerekecek.
Knowledge and Experience are Power

XX_CİHAN_XX

Anladım hocam, DMA her zaman karşılaştırma işlemlerinden önce işini bitireceği için sıkıntı olabilir gibi ama bakalım denemekte fayda var.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

kralsam

Alıntı yapılan: CLR - 20 Kasım 2014, 15:06:07
Dma ile porttan buffer'a okuyup sonra karşılaştırma yapabilirsin, karşılaştırma yaparken dma yeni bilgileri okur, işlemcinin ram'inde mesela 1000byte'lık alan ayır, dma ile portu paralel oku sonra dma transfer complete olunca karşılaştırmaya başla, tabi burada muhtemelen şöyle bir sorunun çıkacak dma senin karşılaştırma işlemlerinden daha hızlı işlemleri bitirecek, senin işlemlerin bitmeden dma'ı tekrar aktif etmemelisin veya 2 buffer kullanmalısın. Orada bazı ayarlar çekmen gerekecek.
Hocam sinyal continuous ise işlemci yetişemeyeceğinden buffer bir süre sonra taşmayacakmı? Yanlış anlamayın pek bu tip uygulama yapmadım ama yorum yapmaya çalışıyorum. Yanlış düşünüyorsam mantığı öğrenmek isterim.

CLR

Alıntı yapılan: kralsam - 20 Kasım 2014, 15:43:42
Hocam sinyal continuous ise işlemci yetişemeyeceğinden buffer bir süre sonra taşmayacakmı? Yanlış anlamayın pek bu tip uygulama yapmadım ama yorum yapmaya çalışıyorum. Yanlış düşünüyorsam mantığı öğrenmek isterim.

Cevabımın sonundaki açıklamam onun içindi zaten dma 1000 transferi tamamlayınca dma'ya 2. adres göstermek gerekecek , dma'nın 2. okuma işlemi bitmeden 1. bölümdeki tüm karşılaştırmalar vs yapılmış olması gerekecek. Bu şekilde continuous olarak çözülür.

Konuyu tam olarak bilmediğimden çözümler havada olacak ama mesela ben olsam AL422 miydi neydi şu camera buffer'ından kulllanırım, 400bin civarı byte depolayabiliyordu, o depolarken işlemci sadece karşılaştırma yapabilir ama orada AL422'yi ring-buffer tarzında kullanmak gerekir(kendisi FİFO zaten), biraz düşünülüp çalışılması gereken bir durum.
Knowledge and Experience are Power

kralsam

Alıntı yapılan: CLR - 20 Kasım 2014, 16:14:27
Cevabımın sonundaki açıklamam onun içindi zaten dma 1000 transferi tamamlayınca dma'ya 2. adres göstermek gerekecek , dma'nın 2. okuma işlemi bitmeden 1. bölümdeki tüm karşılaştırmalar vs yapılmış olması gerekecek. Bu şekilde continuous olarak çözülür.

Konuyu tam olarak bilmediğimden çözümler havada olacak ama mesela ben olsam AL422 miydi neydi şu camera buffer'ından kulllanırım, 400bin civarı byte depolayabiliyordu, o depolarken işlemci sadece karşılaştırma yapabilir ama orada AL422'yi ring-buffer tarzında kullanmak gerekir(kendisi FİFO zaten), biraz düşünülüp çalışılması gereken bir durum.
Hocam demek istediğim paralel bus olarak yine byte olarak alırsak yetişmez. Yani yetişecekse direk girdiğimizde de yetişir. Ha şu olabilir. 8 bit değilde varsa 32 bit kullanılır. (işlemci de öyle ) aynı sürede 32 bit işlenirse olabilir sanırım.

CLR

Sanırım benim anlattığım başka seninkisi başka, sen sürekli çevrinden bahsediyorsun. İşlemci 72Mhz'de ise sürekli okuyacak gibi ama ona zaten hem port hızı izin vermez ve hem dma ile işlemci aynı bus'ı kullanıyor yani diğer işlemlere zaman kalmaz. Ama konu o değil amaç 1sn'de 40Mbyte 'lık işlem sürekliliğinden bahsediyorum, aradaki 32mhz'lik fark belki kullanılabilir mi diye düşündüm.  Fakat muhtemelen olmaz, işlemciyi 72mhz'de çalıştırılsa bile 40MbytePerSecond 'lık okunamayabilir , dmanın okuyup yazması  2 cycle sürse işlemci saniyede 36Mbyte okuyup yazacaktır. Karşılaştırmasız hemde.

Ayrıca buna neden gerek var anlamış değilim, işlemci başarsada başka bişey yapamaz.
Knowledge and Experience are Power

kralsam

Alıntı yapılan: CLR - 20 Kasım 2014, 17:31:45
Sanırım benim anlattığım başka seninkisi başka, sen sürekli çevrinden bahsediyorsun. İşlemci 72Mhz'de ise sürekli okuyacak gibi ama ona zaten hem port hızı izin vermez ve hem dma ile işlemci aynı bus'ı kullanıyor yani diğer işlemlere zaman kalmaz. Ama konu o değil amaç 1sn'de 40Mbyte 'lık işlem sürekliliğinden bahsediyorum, aradaki 32mhz'lik fark belki kullanılabilir mi diye düşündüm.  Fakat muhtemelen olmaz, işlemciyi 72mhz'de çalıştırılsa bile 40MbytePerSecond 'lık okunamayabilir , dmanın okuyup yazması  2 cycle sürse işlemci saniyede 36Mbyte okuyup yazacaktır. Karşılaştırmasız hemde.

Ayrıca buna neden gerek var anlamış değilim, işlemci başarsada başka bişey yapamaz.
Ona tamam hocam. Ben bu kısımda takılmıştım. :)

XX_CİHAN_XX

Bu veri süzme işlemi 2-3 saniye çalışacak ve istenilen veriler çekilince program bu işlemi bırakıp başka işler yapacak. Daha sonra zaman zaman tekrar birkaç saniyeliğine bu paketleri süzme işine dönecek. Yani programın yaptığı tek iş bu değil. Ancak yorumlarınız ve incelemelerim neticesinde F1 ile bu işi yapmaktan vazgeçip F4 e dönüş yaptım. Yorumlarınız için teşekkür ederim arkadaşlar.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.