Stm32 DFU

Başlatan SpeedyX, 26 Mart 2013, 23:49:50

SpeedyX

Merhabalar,

Stm32f103RC ile DFU denemesi yaptım fakat başarılı olamadım, daha önce uğraşmış arkadaşlar hangi noktaları düzenlediklerini buraya yazarlarsa çok yardımcı olur.
DFU giriş butonu kontrolünü iptal ettim, direkt USB init kodlarına gidiyor fakat PC yeni aygıt görmüyor.

Benim düzenlediklerim:
#elif defined (USE_STM3210C_EVAL)
  #define USB_DISCONNECT                      GPIOC
  #define USB_DISCONNECT_PIN                  GPIO_Pin_8
  #define RCC_APB2Periph_GPIO_DISCONNECT      RCC_APB2Periph_GPIOC

USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM3210E_EVAL

STM32_USB-FS-Device_Lib_V3.4.0 ve STM32_USB-FS-Device_Lib_V3.3.0 ile denedim.

Kolay gelsin.

SpeedyX

Arkadaşlar hiç uğraşan yok mu?
Ufak bir hata yapıyorum ama... nerde.

XX_CİHAN_XX

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.

X-Fi

Ben kullaniyorum disconnect pini önemsiz usb hatlarina hiçbir müdehale olmadan direnç kapasite v.s. hiçbiri olmasa bile pc tarafına driver ı kurup çalıştırabiliyorsunuz.

Donanimsal olarak karşılaşabileceğiniz sıkıntılar usb uçlarının ters bağlı olması, HSE kristal kullaniyorsaniz sorunlu olması, HSI kullaniyorsaniz system dosyasini yanlış düzenlemeniz durumunda çalışmaz. Diğer tüm USB init fonksiyonları usb tanima sağlandıktan sonra işlenecek sizin çözümünüz donanimda.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

SpeedyX

Alıntı yapılan: X-Fi - 27 Mart 2013, 15:18:07
Ben kullaniyorum disconnect pini önemsiz usb hatlarina hiçbir müdehale olmadan direnç kapasite v.s. hiçbiri olmasa bile pc tarafına driver ı kurup çalıştırabiliyorsunuz.

Donanimsal olarak karşılaşabileceğiniz sıkıntılar usb uçlarının ters bağlı olması, HSE kristal kullaniyorsaniz sorunlu olması, HSI kullaniyorsaniz system dosyasini yanlış düzenlemeniz durumunda çalışmaz. Diğer tüm USB init fonksiyonları usb tanima sağlandıktan sonra işlenecek sizin çözümünüz donanimda.
Merhaba,

Mevcut kartımla zaten USB HID haberleşmesi yapıyorum, HSE 8Mhz sorunsuz çalışıyor vs. Donanım kısmında sorun olsa USB hiç çalışmaz. DFU kodlarını yüklediğimde cihaz hiç enumeration yapmıyor.
Amacım DFU da eklemek.

Jump_To_Application(); kısmını da tamamen iptal ettim, direkt DFU olarak açıldığını görmek istiyorum ama bir sorun var.

Cihanın yazdıklarına da bir göz atıp test edeceğim.

Aklınıza birşey gelirse beklerim.

X-Fi

STM32L152RD için kullandığım DFU kütüpanesini yükledim.

- Clock kaynağı olarak HSI kullanir.
- Reset sonrası PA3 pin LOW ise DFU başlar.
- PC6 pin DFU modunda iken Flash yapar.

http://www.coskunergan.com/down/STM32_USB-FS-Device_Lib_V3.4.0.rar

http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

SpeedyX

@X-Fi,
Teşekkürler.

İndirdim, target olarak STM3210C-EVAL seçtim,
işlemciyi de STM32F103RC seçtim,
proje C/C++ tanımlarını da USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM3210C_EVAL şeklinde değiştirdim,
platform_config.h da #define USE_STM3210C_EVAL tanımını aktif ettim

hatasız derledim fakat No Algorithm found for: 08000000H - 080012CFH şeklinde hata alıyorum, programlayamadı.

Diğer st-link seçenekleri de doğru ve programlayıcıyı görüyor.
Bu sefer program bile atamadım...

STM32F10X_HD, USE_STM3210C_EVAL ifadelerinde bir yanlışlık yok sanıyorum?

z

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

X-Fi

Dediğiniz gibi hatasız derleniyor elimde o işlemciden yok debug yaptım herşey olması gerektiği gibi kuruluyor. Application notlarına birdaha bakın hocam gözden kaçırdığınız biyer olabilir.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

SpeedyX

#9
Alıntı yapılan: z - 27 Mart 2013, 19:42:39
Belki aynı sorundur. https://www.picproje.org/index.php/topic,44448.msg335834.html#msg335834
Hocam aynı sorun, projede St-link olmadığından o bölge boş kalmış.
Şimdi programladı.

Fakat yine bir hareket yok, debug ile baktım, program ilerliyor, USB_Init() den sonra startup_stm32f10x_cl.s dosyasında işaretli yere gidiyor ve orda kalıyor.
ETH_IRQHandler
ETH_WKUP_IRQHandler
CAN2_TX_IRQHandler
CAN2_RX0_IRQHandler
CAN2_RX1_IRQHandler
CAN2_SCE_IRQHandler
OTG_FS_IRQHandler

                B       .   <----- burada sabit kalıyor

                ENDP

                ALIGN


  /* Enter DFU mode */
  DeviceState = STATE_dfuERROR;
  DeviceStatus[0] = STATUS_ERRFIRMWARE;
  DeviceStatus[4] = DeviceState;

  Set_System();
  Set_USBClock();
  USB_Init();  
  STM_EVAL_LEDInit(LED1); // buraya gelmiyor


_CL tanımladığımda da PLL de kalıyor. Fakat bu cihaz HD diye biliyorum.
    /* Enable PLL2 */
    RCC->CR |= RCC_CR_PLL2ON;
    /* Wait till PLL2 is ready */
    while((RCC->CR & RCC_CR_PLL2RDY) == 0)
    {
    }


startup_stm32f10x_cl.s dosyasını kullanması bana biraz garip geldi, sanırım problem burada. _hd kullanmalıydı.
Biryerde bunun seçimini yanlış yaptım sanırım...

z

#10
B       .   <----- burada sabit kalıyor

Olarak  gösterdiğin satır interrupt satırı. İşlemci interrupt yemiş ve senin programı terkedip bu satıra zıplamış ve sonsuz döngüye girmiş.

Sanki programında interrupt kullanan bir donanım var yazılımın interruptı açıyor hard olarak int oluşuyor ve sen vektörü bu interrupt rutinine yöneltmemişsin gibi bir durum var.

Vektor tablondaki isimle senin fonksiyon ismi eşleşmemiş.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

#11
Son yorum en doğrusu.
void USB_LP_CAN1_RX0_IRQHandler(void)
{
  USB_Istr();
}
Buraya gitmesi gerekiyor ama hiç gelmiyor.

CL ye ait startup .s dosyasını kullanmasını nasıl engelleyebilirim? İşlemcim HD.
CL .s dosyasında vektör tablosunda USB_LP_CAN1_RX0_IRQHandler yok.

z

Alıntı yapılan: SpeedyX - 27 Mart 2013, 20:16:01
Son yorum en doğrusu.
void USB_LP_CAN1_RX0_IRQHandler(void)
{
  USB_Istr();
}
Buraya gitmesi gerekiyor ama hiç gelmiyor.

CL ye ait startup .s dosyasını kullanmasını nasıl engelleyebilirim? İşlemcim HD.
CL .s dosyasında vektör tablosunda USB_LP_CAN1_RX0_IRQHandler yok.

vektör tablosunda bu handlerin olacağı satıra elinle USB_LP_CAN1_RX0_IRQHandler'ı yaz. Yada mevcut tablodaki ismi senin fonksiyona ver.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

SpeedyX

Belki çözüm olur ama startup dosyası zaten yanlış, başka bir problem çıkarır bence.

SpeedyX

Aynı handler ismini yazınca kabul etmiyor zaten.

Çözüm çok basit olmalı ama bulamadık.