Cortex M3 çipleri STM32F103

Başlatan z, 08 Ocak 2013, 03:19:54

hgs

STM kullanın fiyatı adetli alımda cok değişiyor. 2.5$ civarı

LukeSkywalker

Flashtan kod koşturmak nedir? Zaten programlar doğrudan flasha yüklenmiyor mu?

z

Normalde kodlar flashdan koşturulur. Fakat flashda 0 wait state kullanamama durumu varsa o zaman kodları flashdan rama kopyalarsın ve ramdan koşturursun.

Rama kopyalamanın hızlanma yanında başka avantajı da var. Kodlarını kriptolayıp usb den (illa flashdan değil) vs den de çipe yollayıp içeride kriptoyu açıp rama aktarabilirsin vs vs.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

Alıntı YapRama kopyalamanın hızlanma yanında başka avantajı da var.
How ?

LukeSkywalker

#109
Program bellegi flash olduguna gore, yazdigimiz programlarin tamami bu wait state ile mi calisiyor yani?  Programin tamami ram'e nasil tasinacak?

mesaj birleştirme:: 12 Şubat 2013, 16:43:05

Flashtan kodlar calisirken wait state 2 ise her satir asm kodu icin toplam 3 saykil mi geciyor demek oluyor o halde?
(Her kodu1 saykil kabul edersek)

z

Ramın kapasitesi yetiyorsa ister kodun tamamını rama at ister çok kullanılan kısımlarını.

Evet 2 wait state deyince 1 clock dan sonra 2 clock boş geçer. Her 3 clock da flashdan 32 bit okunur.

Hızlandırıcı modül varsa flash 32 bit değil 96 bit olur. Bu durumda gene 1 clock dan sonra 2 boş clock olur fakat
96 bit okunduğu için 3 e parçalayınca 3 tane 32 bit hazır olduğundan 0 wait state olmuşçasına kodlar koşar.

Aslında neden tüm çiplere bu özelliği koymazlar bilmiyorum. Öyle ahım şahım bir donanım değil. Yaptığı iş basit.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

LukeSkywalker

STM32F4'te de flash'ın 128 bit olduğu yazılmış. Diyelim ki 6 wait state var. Bu durumda 6x32>128
Bu durumda nasıl 0 ws olacak?

mcan

#112
Alıntı yapılan: z - 12 Şubat 2013, 16:06:34
Normalde kodlar flashdan koşturulur. Fakat flashda 0 wait state kullanamama durumu varsa o zaman kodları flashdan rama kopyalarsın ve ramdan koşturursun.

Rama kopyalamanın hızlanma yanında başka avantajı da var. Kodlarını kriptolayıp usb den (illa flashdan değil) vs den de çipe yollayıp içeride kriptoyu açıp rama aktarabilirsin vs vs.
Rama kopyaladigim kod flasha gore daha yavas calisiyor.Sebebini arastirirken bus yapisina gozum carpti hatta forumun bir yerine de yazmistim, bus daraliyor kod ve data ayni bus i kullanmis oluyor.Normalde flashdan kosarken kod flashdan data rama bagli bus i kullaniyor ama kodu rama koyunca ikiside ayni busi kullaniyor kod yavasliyor. Denemeyi bizim cm4 kartinda yapmistim.

Dokumanda CM4 icin bus yapisi su sekilde verilmis
[IMG]http://i49.tinypic.com/2cr9cty.jpg[/img]
Kodu rama kopyalayinca I ,S ve D bus ayni alana ortak erisiyorlar.Sanirim ram a atilan kod bu sebeple daha yavas isliyor.

CM3 icin denemedim ancak sanirim daha da yavas olur.Cunki araya FLITF girmis.ICODE FLITF uzerinden sram a bagalaniyor sanirim.
[IMG]http://i46.tinypic.com/9pygm0.jpg[/img]

STM32 cm4 icin yazdigi kodu sadece ram uzerinde daha hizli kosturabilen varmi ,varsa ornek verebilirmi? Belkide benim yaptigim bir hata vardir.

mcan

#113
Alıntı yapılan: gerbay - 12 Şubat 2013, 20:52:10
@mcan,

hocam belki başka bir sorun olabilir. mesela eski ARM7TDMI-S mimarisinde 55 MHz de çalışan AT91SAM7S256 MCU su ile yapılmış bir MP3/AAC Player projesi;

http://embdev.net/articles/ARM_MP3/AAC_Player

adamlar demişki;

Because code execution from Flash is rather slow on the AT91SAM7, I had to move some of the MP3 and AAC decoder functions to RAM to get sufficient performance. This is was done by adding the prefix

__attribute__ ((section (".data")))


to the function definition. With these optimizations decoding one frame takes between 16 ms (MP3, low bitrate) and 21 ms (AAC, high bitrate).

The AAC decoder can handle AAC files in ADTS stream format (.aac) and MP4 container format (.mp4, .m4a).


__attribute__ ((section (".data")))    kısmı GCC ye özel birşey farklı derleyicilerin farklı yöntemleri var RAM function konusunda..


eğer kıyaslayacak olursak her ikiside mimari olarak Harvard mimarisi kullanıyor.. bus yapısı aynı yani..
@gerbay yaniliyorsam duzelt,
Dedigin mcu nun data sheetinde su yaziyorhttp://www.atmel.com/images/doc6175.pdf
ARM7TDMI Processor
z RISC processor based on ARMv4T Von Neumann architecture
z Runs at up to 55 MHz, providing 0.9 MIPS/MHz
z Two instruction sets
z ARM
®
high-performance 32-bit instruction set
z Thumb
®
high code density 16-bit instruction set
z Three-stage pipeline architecture
z Instruction Fetch (F)
z Instruction Decode (D)
z Execute (E)


Yani cortexm4 harvard ama arm7tdms von neuman. Ayrica bus yapisinda bahsettigin mcu da harici memory controller var. Bu fark bunlardan olamaz mi?

Ram-Flash denemeleri yaptığım Keil projesini arıyorum...

LukeSkywalker

Gerbay hocam bilgileriniz icn tesekkur ederim.
Flash hafizanin hiz bilgisini dokumanlarda goremedim, nereden ulasiriz bu bilgiye, bir de hocam bu hiz ayarlanabiliyor mu kullanici tarafindan?

mcan

Alıntı yapılan: gerbay - 12 Şubat 2013, 21:34:32
haklısın hocam ben ARM7TDMI-S i de Harvard mimarisi olarak hatırladım, yanılmışım, özür dilerim..

Evet bu durumda Cortex-M3 lerde RAM function yapmak sistemi yavaşlatır..
Özür diye bişey olmaz ben zaten sizlerden öğreniyorum,belki ben yanılıyorumdur bi türlü yazdığım kodu bulamadım... zaten çok basit bir kod toplama işlemi ile oluşturulmuş 2 saniye süren bir delay fonksiyonu ve led yak södür. Bunu keil deki Target options daki IRAM ve IROM alanlarının ikisinide ram adres aralığında ayrı ayrı tanımlayarak derleyip işlemciye atmıştım.Kod ram üzerinde baya yavaş çalışmıştı...
@Gerbay benim anlamadığım nokta özellikle cm4 ile ilgili, orada dbus a bağlı 64kb ram var şimdi keilde öyle bir ayarlama yapsakki literaller vss d bus a ilişik ccm 64kb ram i kullansın,ınstruction lar SRAM in 112kb lik kısmından kullanılsın,sbus ise 16 kblik kendi alanını kullansın.Özellikle dbus ve ıbus bu şekilde ayırabilirsek sanırım kod istediğimiz hızda koşabilir.
Bunu keilde nasıl yapabiliriz?

2.1.1 S0: I-bus
This bus connects the Instruction bus of the Cortex™-M4F core to the BusMatrix. This bus 
is used by the core to fetch instructions. The target of this bus is a memory containing code 
(internal Flash memory/SRAM or external memories through the FSMC).
2.1.2 S1: D-bus
This bus connects the databus of the Cortex™-M4F and the 64-Kbyte CCM data RAM to the 
BusMatrix. This bus is used by the core for literal load and debug access. The target of this 
bus is a memory containing code or data (internal Flash memory or external memories 
through the FSMC).
2.1.3 S2: S-bus
This bus connects the system bus of the Cortex™-M4F core to a BusMatrix. This bus is 
used to access data located in a peripheral or in SRAM. Instructions may also be fetch on 
this bus (less efficient than ICode). The targets of this bus are the 112 KB and 16 KB 
internal SRAMs, the AHB1 peripherals including the APB peripherals, the AHB2 peripherals 
and the external memories through the FSMC.


Birde dökümanda şu şekilde bir yazmaç var,
Bit 20CCMDATARAMEN: CCM data RAM clock enable
Set and cleared by software. 
0: CCM data RAM clock disabled
1: CCM data RAM clock enabled

Bunu kursak istediğimiz olmuş olurmu? Keil de hangi dosyada ccm alanı tanımlanmıştır? bu alanın clock unu kapayabildiğimize göre default olarakprogramları  keil buraya göre derlemiyordur heralde.(Konu keil e döndü gibi ama benim şu an deneme yapabileceğim başka derleyici yok , o sebeple olayı keil e indirgedim)

z

#116
http://www.keil.com/appnotes/files/apnt_230.pdf

Sayfa 5

"Running programs in the internal STM32 RAM:
It is possible to run your program in the processor RAM rather than Flash. In this case, the Flash programming tool is not....."

Aşağıdaki tartışmada da

Flash, internal ram ve external ramda koşan deneme kodlarının işlenme süresinden bahsedilmiş.

Code running into SRAM : 82 msec
Code running into FLASH (internal): 100 msec
Code running into External SRAM : 636 msec :-o :-o :-o !!!!!!!

https://my.st.com/public/STe2ecommunities/mcu/Lists/cortex_mx_stm32/Flat.aspx?RootFolder=https%3a%2f%2fmy%2est%2ecom%2fpublic%2fSTe2ecommunities%2fmcu%2fLists%2fcortex%5fmx%5fstm32%2fCode%20execution%20from%20external%20RAM&FolderCTID=0x01200200770978C69A1141439FE559EB459D7580009C4E14902C3CDE46A77F0FFD06506F5B&currentviews=1173


Aşağıdaki açıklama kritik.


http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0337g/BABGAJAB.html


12.5.6. Pipelined instruction fetches

To provide a clean timing interface on the System bus, instruction and vector fetch requests to this bus are registered. This results in an additional cycle of latency because instructions fetched from the System bus take two cycles. This also means that back-to-back instruction fetches from the System bus are not possible.


Note

Instruction fetch requests to the ICode bus are not registered. Performance critical code must run from the ICode interface.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#117
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf

•72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access

Namussuzların yaptığı reklama bakın. Yalan mı yazmışlar hayır. Ama benim gibi dikkatsizler bunu okuyunca 72Mhz de 0 wait state de kod koşacak anlıyor.

Halbuki dikkatli okunursa adamlar 72Mhz de 0 wait state ile RAM'a erişebilir demek istiyorlar.

İşlemcinin Flashdan kod koşturma hızı 24Mhz. Bunu tanıtımda yazmamışlar. Pdf dokumanın derinliklerinde bahsetmişler.
Fakat İşlemcinin hızı ise 72Mhz.

The Flash memory access time is adjusted to the fHCLK frequency (0 wait state from 0
to 24 MHz, 1 wait state from 24 to 48 MHz and 2 wait states above)


Bundan sonra TVlerdeki aldatıcı reklamlara kızmayacağım.




Bana e^st de diyebilirsiniz.   www.cncdesigner.com

LukeSkywalker

Demekki işlemci seçerken bu wait state olayına bakmak lazım. 8bit PIClerde rastlamamıştık böyle birşeye...

z

STM32F103 de flashın 64 bit olduğunu bilmiyordum.  ART gibi bir donanım olmayınca flashın 32 bit olduğunu düşünüyordum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com