Stm32 uart ftdi veri gönderme

Başlatan sımışka, 05 Eylül 2021, 20:18:45

sımışka

Merhaba,

St de uart üzerinden rx tx pini kullanarak ftdi ile pc ye bağlanıp veri gönderip alabiliyoruz. Karşı tarafda portu kapattığım zaman tx ledi artık flush olmuyor, fakat veri göndermeye devam ettiğim için txcomplatecallbacke dallandığını görüyorum debugda. Bağlatının kapatıldığını nasıl anlayıp artık veri göndermeyi kesebilirim stm de ?

Teşekkürler

quarko

Bağlantının kapatıldığını anlayamazsın ama data gönderip alabiliyorsanız, örneğin üstüste 5 kere data gönderdiğinizde cevap gelmezse, bağlantının koptuğunu kabul edip ona göre işlem yapabilirsiniz. Sonrasında daha uzun periyotlarda tekrar deneyip cevap alabildiğiniz bir veri gönderdiğiniz olursa, yeniden bağlantının geldiğini kabul edebilirsiniz.
"Aslanlar kendi hikayelerini yazmadıkça, avcıların kahramanlık hikayelerini dinlemek zorundayız."

yas

FTDI ın DTR (Data Terminal Ready) pinini takip edebilirsin.

sımışka

Alıntı yapılan: quarko - 05 Eylül 2021, 23:13:26Bağlantının kapatıldığını anlayamazsın ama data gönderip alabiliyorsanız, örneğin üstüste 5 kere data gönderdiğinizde cevap gelmezse, bağlantının koptuğunu kabul edip ona göre işlem yapabilirsiniz. Sonrasında daha uzun periyotlarda tekrar deneyip cevap alabildiğiniz bir veri gönderdiğiniz olursa, yeniden bağlantının geldiğini kabul edebilirsiniz.
Şu anki algoritmam bu ama karşıdan cevap almadan nasıl yaparım diye sormaya çalışmıştım aslında

sımışka

Alıntı yapılan: yas - 05 Eylül 2021, 23:40:39FTDI ın DTR (Data Terminal Ready) pinini takip edebilirsin.
Ne yazikki PCB de bu pinleri bağlamamiştim, pişman oldum. Arada karşıdan ack sinyali gönderecek şekilde algoritmayı düzenledim ama amaçladığımi yapamadım. Bir sonraki PCB de artık bağlarım.

yas

Eğer uart çevirici entegresi pc nin usb portu üzerinden besleniyorsa, mcu nun RX pini hattı ile gnd arasına uygun bir direnç bağladığında pin sürekli low da kalıyorsa uart entegresinde besleme olmadığı (pc ye bağlı olmadığı) yorumu yapılabilir.

Tagli

Protokolün nasıl çalıştığı önemli bence. Modbus gibi sorgu-cevap mantığı ile çalışan bir protokolde böyle bir sorun olmaz. Yani işlemci, kendisine sorgu gelmediği sürece sessiz kalmalı.
Gökçe Tağlıoğlu

sımışka

Alıntı yapılan: Tagli - 06 Eylül 2021, 08:02:36Protokolün nasıl çalıştığı önemli bence. Modbus gibi sorgu-cevap mantığı ile çalışan bir protokolde böyle bir sorun olmaz. Yani işlemci, kendisine sorgu gelmediği sürece sessiz kalmalı.

Eskiden host pc sorgu atıp kart cevap veriyordu, bu açıkcası çok verimli bir yöntem değil aynı sorguyu devamlı atması gereksiz.
Şimdi kart devamlı stream veri gönderiyor, host pc aldığına yönelik belli bir periyot sonunda ACK sinyali gönderiyor. Asıl amacım hosttunda ACK bilgisi göndermesini tamamen ortadan kaldırıp kartın hosttaki portun kapanması/host pc nin kapanmasını algılamasını istiyorum fakat ftdi çipindeki dtr dts rts cts gibi pinleri de donanımsal pcb de bağlamamıştım.

sımışka

Alıntı yapılan: yas - 06 Eylül 2021, 00:40:13Eğer uart çevirici entegresi pc nin usb portu üzerinden besleniyorsa, mcu nun RX pini hattı ile gnd arasına uygun bir direnç bağladığında pin sürekli low da kalıyorsa uart entegresinde besleme olmadığı (pc ye bağlı olmadığı) yorumu yapılabilir.
mcu nun rx pinine host pc veri göndermeyecek ki hocam, tek yönlü devamlı transmit olacak mcu dan host pc ye.

Tagli

İşlemci bilgisayar kapalıyken bile veriyi sürekli basmaya devam etsin o zaman, bir sakıncası var mı ki?
Gökçe Tağlıoğlu

yas

Demek istediğim pc nin bağlı olup olmadığını algıladıktan sonra gönderme rutinini devreye almak yada devre dışı bırakmak. Yani pc bağlıyken mcu rx pini high olacak bağlı değilken low olacak bu duruma göre gönderme rutini açık yada kapalı olacak. Eğer pc tarafı hiç bilgi göndermiyorsa mcu rx pini sadece input tanımlamak yeterli uart rx çalışmasınada gerek yok bu durumda.

sımışka

Alıntı yapılan: Tagli - 06 Eylül 2021, 09:14:33İşlemci bilgisayar kapalıyken bile veriyi sürekli basmaya devam etsin o zaman, bir sakıncası var mı ki?
Aslında bilgisayarın kapalı olması sorun değil. Karşıdaki host program Java tabanlı, linux makine. Javaci arkadaş hazır bir serial framwork kullanıyor. Pek hakim değil. Bir süre sonra ftdi drivera istemeden zarar veriyor. USB port gördüğü halde, karta sorgu verisi gelmiyor doğal olarak kattta cevap dönemiyor. Amaç onun sorgusunu tamamen kaldırmak ve tek yönlü transfere dönmek. Karşı taraftaki portta bozulduğu zaman veya kapandığı zaman benim transferi tamamen kesmem. Karşıdan ack almadan bir şekilde çözersem ona bağlılığımı bitirmiş olurum diye düşündüm.

sımışka

Alıntı yapılan: yas - 06 Eylül 2021, 09:20:35Demek istediğim pc nin bağlı olup olmadığını algıladıktan sonra gönderme rutinini devreye almak yada devre dışı bırakmak. Yani pc bağlıyken mcu rx pini high olacak bağlı değilken low olacak bu duruma göre gönderme rutini açık yada kapalı olacak. Eğer pc tarafı hiç bilgi göndermiyorsa mcu rx pini sadece input tanımlamak yeterli uart rx çalışmasınada gerek yok bu durumda.
Gönderiyor hocam , host daki arayüzde konfig ayarları var , konfigürasyon yapıldığı zaman en azından veri gönderiyor.