STM islemcilerde SPI NSS pinini otomatik kullanmak

Başlatan z, 15 Şubat 2020, 11:19:50

z

Bugune kadar SPI yazilimlarimda NSS pinini GPIO uzerinden kendim on/off yapiyordum. Bu defa bu isi donanima yaptirmak istedim.

Ancak NSS pini dokumanlarda yazildigi gibi davranmiyor.

Surekli olarak lowda kaliyor.

Googleda baktigimda ayni problem pek cok kisi tarafindan da yasanmis.

Acaba bir trick mi var?

Benim NSS pininden beklentim su;

NSS pini normalde high da bekleyecek. Ne zaman master tarafta tx registerime bir sey yazsam ilk once NSS low olacak ardindan seri data yollanacak ve data gittiginde NSS gerisin geri otomatik high olacak.

Ama olmuyor. Ustelik hic  High olmuyor.

NSS pini Alternate Function tanimladigimda zaten lowda kaliyor. Ardindan SPI init yaptigimda low da bekliyor. Su ana kadar High olduguna tanik olmadim.

NSS pinini GPIO out tanimlarsam zaten pin SPI pini olmaktan cikiyor. Bunda sorun yok H/L yapilabiliyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Tagli

Aslında referans dokümanında yazıldığı gibi davranıyor ama bu şekliyle ne işe yarayacağını ben de kestiremedim:
Alıntı YapNSS output enabled (SSM = 0, SSOE = 1)
This configuration is used only when the device operates in master mode. The NSS signal is driven low when the master starts the communication and is kept low until the SPI is disabled.

SSOE'nin 0 olduğu durum, multimaster bir hatta bus collision tespitine yarıyor sanırım. Ama fiziksel bağlantıyı da anlamadım. Yani öyle bir hatta NSS'yi kim sürüyor bilmiyorum. Belki tüm master'ların NSS'leri birbirine bağlanıyor ve aktif olmak isteyen taraf SSOE = 1 yapıyordur ama bana yine de pek olmaz gibi geldi...

SSOE = 0 iken bus collision tespit edilirse, yani master NSS yattında 0 görürse, o zaman otomatik olarak SPI kapanıyor ve cihaz slave moduna geçiyor (ama tekrar enable edilmesi lazım).

Gökçe Tağlıoğlu

mufitsozen

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

z

NSS pini neden H olmuyordu sebebini anlamadim, ayni init rutinleri ile simdi NSS pinini  SSOE biti ile 1/0 yapabiliyorum.

NSS pini L yaptiktan sonra data yollayabiliyorum.
NSS pinini H yaparsam SPI dediginiz gibi disable oluyor ve slave moduna geciyor.

Eger NSS pinini H yaparak SPI master ve enable yaparsam gene data yollayabiliyorum. Fakat NSS H iken bu pini bir kablo ile lowa dokundurursam gene SPI otomatik disable oluyor ve Slave moda geciyor.

NSS cikisi master tarafta push pull degil de pull up tanimlanir ve master bu pini H yapip iletisim yaparken slavelerden birisi bu pini L yaptiginda otomatik haberlesme susar ve NSS'i low yapan slave digerlerine master olmak istedigini soylemis olur. Aklima baska bir sey gelmiyor. Slave tarafta NSS pinine bakma diyebildigimize gore basit bir protokol ile multimaster isi halledilebilir.

Bu durumda NSS pinini istedigim amacla otomatik kullanamayacagim gibi gorunuyor.

Iletisimi eski usul GPIO ile yonetecegim.

Birden fazla slave oldugunda GPIO ile slaveleri adreslemek mumkun.

Eger tek master tek slave olacaksa NSS pini ile Slave'i kapatip acmak da mumkun.

Bu durumda NSS'in asil amaci multimaster uygulamasi gibi gorunuyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

JOKERAS

z, İşlemci hatalı üretim olmasın!
Erratalarına baktınmı.Yapıyı ilşikilendirdiğin ilgili Registerleri 1 veya 0 yaparak
dene bence.Böyle Hatalar özellikle iç Donanımda olabiliyor.

Bir tarihte yeni nesil Pic serisinde başıma geldi,boş yere uğraştım.
1 Olması gereken yeri 0 yaptığımda çalışıyordu.Bunu çözene kadar bir sürü uğraşmıştım.
Microcihip'e Twetterdan yazdım.Dedim böyle böyle bir hatanız var,Hatanızı buldum Bana
para verin!:)Hani hep olurya bilmem ne firmasının açığını buldu 100 bin Dolar ödül aldı falan diye.
Bende o hayalle Verin paramı dedim:)Vermedi vicdansızlar.
Karşıdaki Vatandaş ,bana buradan teknik destek vermiyoruz dedi Erratalardan bahsetti link verdi.Erratada yazmışlar zaten.Bir bakıver.