STM32 SPI Donanımı Hk

Başlatan Cemre., 30 Ağustos 2018, 21:22:08

Cemre.

Merhaba,

STM32 referans manuelinden incelediğim ve STM32L011F4x üzerinde denediğim kadarıyla Hardware nSS kontrol mantığının çalışması şu şekilde:
SPI Enable edildiği andan itibaren (SPE bit = 1) SPI Disable edilene kadar (SPE bit = 0) nSS pini Logic Low durumunda kalıyor.

Ancak çalıştığım sensör (LSM6DSL) nSS sinyali bu şekilde geldiğinde bir register'ı tekrar okumaya çalışırsam saçma değerler döndürüyor. nSS sinyalini GPIO pini kullanarak kendim TxRx anında low'a çekip sonra high'a çekersem böyle bir sorunla karşılaşmıyorum.

Öncelikle kafamı kurcalayan kısım, SPI Hardware nSS özelliğinin bu şekilde çalışması normal midir? Diğer işlemci modellerinde bu durum nasıl?
İkinci olarak, sensörün bu şekilde davranması normal midir? Yoksa kaçırdığım bir nokta olabilir mi?

Bu arada dikkat ederseniz her iki ürün de ST firmasına ait...

Teşekkürler.

Cemre.

SPI Chip Select konusunda fikri olan yok mu?  :)

mehmet

Alıntı yapılan: Cemre. - 31 Ağustos 2018, 13:25:52SPI Chip Select konusunda fikri olan yok mu?  :)
Biraz daha detaylı soru sorman daha iyi olur.
Herhangi bir pin ile yapabilirsin.
Zira bir kaç farklı SPI olduğunu düşün;
kontrol uçları ortak sadece CS pinleri farklı
olması yeterli...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

एक होना

@mehmet hocam hayırlı bayramlar yazdın sandım bir an. konuya bakınca cevap yazdığını gördüm.

Cemre.

Alıntı yapılan: Cemre. - 30 Ağustos 2018, 21:22:08Öncelikle kafamı kurcalayan kısım, SPI Hardware nSS özelliğinin bu şekilde çalışması normal midir? Diğer işlemci modellerinde bu durum nasıl?
İkinci olarak, sensörün bu şekilde davranması normal midir? Yoksa kaçırdığım bir nokta olabilir mi?

Şuan 6.66kHz ODR modunda ve HAL kütüphanesinin blocking mode fonksiyonlarını kullanarak (IT veya DMA aktif olmadan) istediğim sıklıkta veri alabiliyorum. Ancak hala nSS (CS) pinini GPIO olarak tanıtıp kendim On/Off yapıyorum. Bunu donanıma yaptırabilmekti asıl amacım. Farkettiğim ve yukarıda da anlattığım üzere SPI donanımı STM32'lerde nSS sinyalini SPI enable bitine bağlamış gözüküyor. (Gerçekte öyle olmasa bile o şekilde davranıyor)
Benim beklentim ve uygulayıp sonuç aldığım yöntem ise ilk CLK pulse'inden önce Low olacak, son CLK pulse'inden sonra High olacak şekilde çalışmasıydı.

Bunun böyle olmamasının bana yarattığı sorun ise konuştuğum çipin iki veri transferi arasında nSS High/Low yapılmazsa saçma sonuçlar döndürmesidir.

Asıl soru ise, SPI donanımı neden benim bahsettiğim ve kullandığım şekilde değil de işime yaramayan hatta sistemin doğru çalışmasını engelleyen bir şekilde çalışıyor? Farklı SPI haberleşmeli donanımların bu şekilde bir çalışmaya verdiği tepki nasıldır? Aynı durumda farklı bir çip olsa (misal bir EEPROM vs) acaba nasıl davranırdı?

devrecii

Cs pinini açar açmaz veri gidecek diye bişey yok yada bitimde hemen 1 yapılacak diye. spi flash , lcd vs bunlarda kimi zaman cs pini 0 yapıyorsun veri gidişinde  program nedeniyle beklemeler oluyor yada kapanışta.

Belki de bekleme koyman lazım çip hazır olması için kullandığım malzeme yavaştır belki.

Cemre.

Alıntı yapılan: iboibo - 01 Eylül 2018, 14:27:30Cs pinini açar açmaz veri gidecek diye bişey yok yada bitimde hemen 1 yapılacak diye. spi flash , lcd vs bunlarda kimi zaman cs pini 0 yapıyorsun veri gidişinde  program nedeniyle beklemeler oluyor yada kapanışta.

Belki de bekleme koyman lazım çip hazır olması için kullandığım malzeme yavaştır belki.

Hocam, sanırım yanlış anlaşılmış.
Zaten hemen öncesinde low, bitiminde high yapılması gerekmiyor şuanda da. Tek ihtiyaç, iki ayrı haberleşme seansı arasında bir kez high-low yapılması gerekiyor.

Cip ile 8MHz clock frekansında haberleşip, saniyede yaklaşık 6800 kez 6 tane 1 bytelık register okuyabiliyorum. Birinci reg. Adresini yollayıp 6 adet reg içeriği cevabını alıyorum burada hiçbir sorun yok gibi gözüküyor..

LukeSkywalker

Hocam bahsettiğiniz pin'in çalışması bu şekilde ayarlanmış mikrodenetleyicide. SPE=1 olduğunda nss pini low, SPE=0 olduğunda nss pini high. Bu şekilde tasarlanmış.
Sensörün datasheetinin 41. sayfasındaki multiple bytes read figüründe de nss pinin bu şekilde çalışmasına aksi yönde bir durum göremedim. Sizin yapmanız gereken SPE bitiyle oynamak.

devrecii

Pardon nss pininde bir problem oluşıyor sanmıştım , stm32f103 de de durum aynı.

Peki  eeprom vs ?   Spi da söyle bişey var cs pini 0 a çekikir komut gönderilir tekrar 1 e çekilmezse o kumut geçerlidir ve devam eder ne yazıkki, sp flash ,lcd , ram kullanmıştım hepsi  böyle idi .