STM32F103C8'e ethernet çipi bağlamak

Başlatan z, 17 Eylül 2016, 18:33:38

z

@gerbay Hocam

Elbette iyi kod yazma sanat işidir. ASM de bu sanatı yaptığımı düşünüyorum. 
C ile kötü kod yazmam ama sanat da yapamam. Sanat yapabilmek için yılarını vermek çok emek harcamak lazım.
Sevmeyen ne şiir yazar ne şarkı sözü. Sen hiç işini sevmeyen şair, heykeltraş, ressam gördün mü?
Ama işini sevmeyen branşını sevmeyen çok teknik adam tanırım.

@digiman

MCU işlerinde kütüphane sevmiyorum. Yaptığım işi gerçekten anlayarak yapmak istiyorum. Kütüphanenin açık olması bana hiç bir şey ifade etmiyor. Açık kütüphanelere üstün körü bakıyor geçiyorsun. Ama kendin yazınca üstün körü olmuyor gerçekten anlıyorsun. Çünkü anlamadığın şeyi koda dökemezsin.


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

z

@gerbay hocam

Bugün iş yerindeyim. ENC çipimi evde modeme bağlıyordum iş yerinde çapraz kablo ile PC'ye bağladım.

Gelen ilk paket gene 806 paketi oldu.

Tamamını yazmadım ve içeriği şu şekilde


4C C3
57 1C 8C 00
FF FF FF  FF FF FF
xx xx xx xx xx xx
08 06
00 01
08 00
06
04
...............


Paketler max 1500 Byte olur diyorduk fakat burada çok büyük geldi.
Bu ne anlama geliyor?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Ederim fakat buffer ile ilgili registerlerden kastını anlamadım. (RX Buffer için 4K ayırmıştım)

Bu bizim ARP paketimizin aynısı. Tüm veriler daha önce yazdığın ARP açıklamandaki paketteki formata uyuyor.  Fakat başlangıçtan 4 byte çok fazla büyük.

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

z

#168
2 gündür zaten çip bugları ile sorun yaşadığımı sanıyorum.

Erretalara baktım RX Bufferı okuyan pointerla ilgili bir bug var. Dokümanda çözüm olarak önerilen şekilde düzelttim fakat 2 gündür hâla aynı noktadayım.

Bir şekilde gelen paketlerde veriler kayık kuyuk olursa kontrolu tekrar ele geçirmek çok zor oluyor.

-----------------------------

Daha şimdi farkettim. 2008 dokümanını kullanıyorum. 2004 dokümanlarında var olan bazı registerleri 2008 de kaldırmışlar.

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

z

#169
Paketi alıp headerdan data boyutunu tespit edip o kadar veri okuyordum. Fakat böyle yapınca CRC bilgisi bufferda kalıyordu.

Circular buffer okuma pointerini (ERXRDPT) CRC üzerine konumlayarak yeni datalara yer açıyordum fakat circular bufferdaki dataları MCU içindeki lineer buffere çekerken CRC hariç çekiyoum.

Haliyle 1 sonraki paketin headerını çekerken en başa bir önceki pakete ait CRC bilgisi alınıyormuş. İlave olarak çipin circular buffer pointerindaki erreta sorunu işin içine girince bayağı tırmaladım.

SPI ile gelen dataları 4 byte CRC yi de okuyacak şekilde çekince sorun bitti. Böyle yapmak yerine  buna ait pointeri de (ERDPNT) ilerletseydim sorun çıkmayacaktı.

Mikrochipin dokümanlarını hep beğenirdim fakat bu doküman çok çok kötü hazırlanmış. 
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

hgs

Alıntı yapılan: z - 24 Eylül 2016, 16:57:10
Mikrochipin dokümanlarını hep beğenirdim fakat bu doküman çok çok kötü hazırlanmış. 

Bu çipi kullanmayı bıraktığınıda okuyacağız.

z

Malum mu oldu?

Dün arkadaşım bahsettiğiniz wireless çipten almış.

Demoları tık tık tık derledi web server yaptı. Authentication falan da vardı. Arm tabanlı bir şeymiş.

Güzelmiş. Bu çiple sonuca varırım artık.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

hgs

#172
Ondan dolayı değil. ESP ile alakalı değil mesele temelde.

2-3 sebebi var. 1 tanesi sizin yazdığınız tespitin daha ileri versiyonu. Bu sebepleri yazmaya gerek duymuyorum. Söyleneni çoğunlukla dikkate almıyorsunuz zaten. Öğrenme yönteminiz aynı yollardan kendinizinde geçmesi şeklinde.

HexfeT

#173
Hazır modül ve kod kullanıp geçmek yerine işin temelinde neler döndüğünü öğrenmek isteyebilecekler için faydalı bir başlık oluyor.

Yüksek standartlara sahip ciddi bir iş yapmak gerekirse tasarımcı esp'yi ya da benzer bir modülü takar geçerim, içinde ne dönüyor beni ilgilendirmez diyemez herhalde. İşleyişin temelini bileceksin ki çıkabilecek sorunlara çözüm üretebilip, güvenilir bir iş ortaya koyabilesin.

frederic

Alıntı yapılan: HexfeT - 24 Eylül 2016, 18:23:15
Hazır modül ve kod kullanıp geçmek yerine işin temelinde neler döndüğünü öğrenmek isteyebilecekler için faydalı bir başlık oluyor.

Yüksek standartlara sahip ciddi bir iş yapmak gerekirse tasarımcı esp'yi ya da benzer bir modülü takar geçerim, içinde ne dönüyor beni ilgilendirmez diyemez herhalde. İşleyişin temelini bileceksin ki çıkabilecek sorunlara çözüm üretebilip, güvenilir bir iş ortaya koyabilesin.

Çok doğru.

engerex

Alıntı yapılan: z - 24 Eylül 2016, 11:36:19
2 gündür zaten çip bugları ile sorun yaşadığımı sanıyorum.

Erretalara baktım RX Bufferı okuyan pointerla ilgili bir bug var. Dokümanda çözüm olarak önerilen şekilde düzelttim fakat 2 gündür hâla aynı noktadayım.

Bir şekilde gelen paketlerde veriler kayık kuyuk olursa kontrolu tekrar ele geçirmek çok zor oluyor.

-----------------------------

Daha şimdi farkettim. 2008 dokümanını kullanıyorum. 2004 dokümanlarında var olan bazı registerleri 2008 de kaldırmışlar.



Anlaşılan durumunuz bu:


hwdesigner

Alıntı yapılan: gerbay - 17 Eylül 2016, 21:47:57
@z hocam, ben senin yerinde olsam üzerinde MAC bloğu bulunan bir MCU ya geçerdim. endüstriyel açıdan bu daha standartlaşmış bir çözümdür. Bu çözümde ethernet bloğuna dışardan harici olarak PHYTER (physical transceiver) entegresi bağlanır. nasıl ki uart ın önüne rs232 ya da rs422 transceiver takıyorsunuz bu da öyle bir durum.

MCU üzerinde ki MAC bloğu MII/RMII arayüzü ile dışardaki PHYTER e bağlanır. Gigabit desteği olan MAC larda GMII / RGMII / SGMII arayüzleri bulunur. R harfi reduced ı ifade ediyor. daha az hat bağlamak gerekiyor. S harfi ise seri yi ifade ediyor örneğin SGMII seri arayüzdür. gigabit gaberleşme yapabilir.

Phyter entegre sağlayıcı bir çok firma vardır.

örneğin;

http://www.ti.com/product/DP83848-EP

http://www.realtek.com.tw/products/productsView.aspx?Langid=1&PFid=13&Level=5&Conn=4&

KS8721BL

DM9161

AM79C875

hocam bu da standartlaşmış birşey..  ciddi birşeyler yapacak arkadaşlar enc28j60 vs spi bağlı çözümlerden uzak dursunlar bence..

Katılıyorum..
STM32F407VG + dp83848cvv phy (http://www.waveshare.com/dp83848-ethernet-board.htm) daha profesyonal bir çözüm olabilir. Hatta frimware deki uygulamalar ile web server tcp/ip örnekleri incelenerek daha rahat uygulanabilir. En azından programı ilk defa çalıştırırken frimware ile geliştirme sürecinde ne nedir diye bakılabilir. Bu arada eval kartlar için var eth örnekleri. eval için pin ataması 407vg ye göre değiştirilmeli RMII MII display ayarlarının Keil de yapılıp 407vg de calıştırılması gerek. Daha hızlı, daha fazla kod alanı, daha fazla GPIO.

z

@gerbay hocam

Benim IP adresim  192.168.1.22 ise.

Mesajımın en sonundaki paketi aldığımda buna yazacağım cevap şu şekilde mi olacak?


Göndereceğim ARP cevap paketi

xx xx xx xx xx xx  (6 Byte)
My MAC                (6 Byte)
08 06
00 01
08 00
06
04
00 02
My MAC ..........     (6 Byte)
192 168 1 22     
xx xx xx  xx xx xx  (6 Byte)
192 168 1 1           

60 byte'a tamamla CRC enable yap yolla




Bize gelen ARP istek paketi

Alıntı Yap8C 00             = sonraki paketin offset i
40 00 C0 03       = status
FF FF FF FF FF FF = dest mac address, broadcast packet
xx xx xx xx xx xx = src  mac address
08 06             = network layer protocol = ARP
--- buradan aşağıda ARP header başlıyor ---
00 01             = hardware address space = Ethernet
08 00             = 0x0800, protocol address space = IP
06                = hardware address length = 6 = mac
04                = protocol address length = 4 = IP v4
00 01             = opcode, 1 = request, 2 = reply
xx xx xx xx xx xx = sender's hardware address
C0 A8 01 01       = 192.168.1.1, sender's protocol address
00 00 00 00 00 00 = target's hardware address
C0 A8 01 16       = 192.168.1.22, target's protocol address
00 00 00 00 00 00 = dolgu malzemesi
00 00 00 00 00 00 = dolgu malzemesi
00 00 00 00 00 00 = dolgu malzemesi
-- ARP paketi bitti --
49 0B D0 12       = checksum
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Hocam ARP isteğinde bulunan adrese hazırladığım ARP cevabı gönderiyorum.

Diyelimki cevap  formatını yanlış hazırladım ve böyle yolladım.

Böyle bir durum varsa bunu nasıl ortaya çıkartırım?

ARP sorgusuna cevap yolluyorum ardından  ard arda 0x800 tipinde sorgular geliyor. Çok nadir 0x806 sorgusu geliyor.

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

z

#179
800 sorgusuna cevap vermeyince artık paket falan gelmemeye başlıyor. Bu durumda adresime ping atıyorum tekrardan paket gelmeye başlıyor.

IP sorgusuna daha yeni başladım. En büyük sıkıntım güzel dokümanımın olmayışı.

ARP için wikideki açıklamalar çok güzeldi. https://tr.wikipedia.org/wiki/Adres_Çözümleme_Protokolü

IP sorgusu ve verilecek için de bir doküman önerin varmı?

ARP paket için verdiğim cevap doğru demiştin.

Acaba gözden kaçırmış olabilir misin? Verdiğim cevapta Protokol adres boyu, hardware adres boyu gibi değerler yer almamakta.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com