STM32F103C8'e ethernet çipi bağlamak

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

z

MACADR0..5 registerlerinde bir anormallik var.

İnternete baktığımda aynı sorun başkalarının da başına gelmiş. Registerlara yazma okuma rutinim düzgün çalışıyor fakat MACADR registerlerinde bir saçmalık var.

MACADR0 ı okursam MACADR5'e yazdığım data geliyor.

Tüm MACADR registerleri  1 byte ötelenmiş.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#121
Hocam tamam MAC ADRler 3. bankta 0,1,2,3,4,5'e dizilmişler.

Bunlara ne yazdıysam aynını okuyabilmem lazım. Ama kayık vaziyette okuyorum.

Birisi de şöyle demiş.

http://www.microchip.com/forums/m414875.aspx

Alıntı YapHi,
I have a similar issue perhaps. I have functions that read and write any ENC28J60 register (via SPI). It seems to work for almost any register. However, I see strange things when I write, then read any of the MAADDR regs.

For example, here is a sequence I using while debugging this:

Write 0x03 to ECON1. This sets bank 3.
Write 0x12 to MAADR1 (offset 0x04)
Write 0x34 to MAADR2 (offset 0x05)
Write 0x56 to MAADR3 (offset 0x02)
Write 0x78 to MAADR4 (offset 0x03)
Write 0x90 to MAADR5 (offset 0x00)
Write 0xAB to MAADR6 (offset 0x01)

Then I read back MAADR1 and I read 0xAB instead of 0x12. I read it again and its correct. I experience this anomoly only with the MAADR regs.

I have Rev 4 silicon at the moment. We are getting rev 6 or 7 shortly. I'm just trying to debug my code on the hardware we have till we get in the new hardware soon.

Is there a known issue here or am I missing something?
thanks,
Steve

mesaj birleştirme:: 21 Eylül 2016, 21:19:07


Cevap gözümün önündeymiş.

Sayfa 27.

MAC ve MII registerlerinin okunması diğerlerinden farklıymış. Niye ise.

Diğer registerler 16 clk ile okunurken MAC ve MII  registerleri 24 clk ile okunuyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

#122
Çipin init rutinlerini tamamladım. Modeme de bağladım ve ana program içinde interupt flağını döngü içinde sürekli olarak kontrol ediyorum.
Gelen paket olsa bile ilgilenecek rutinlerim yok.

Hiç bir şekilde int flaglar set olmuyor. Kabloyu söküp takıyorum gene bir şey yok.

Led ayarlarını default değerinde bıraktım.

Ethernet konnektörü üzerindeki yeşil ışık sürekli yanıyor. Sarı ışık ise kırpışıyor.

En azından şu ana kadar yaptığım işlerin doğru yada yanlış olduğunu nasıl test edebilirim?

Modem arayüzünden baktığımda Kabloyu taktığım LAN portuna yüzlerce KB data gitmiş görünüyor. Alınan 0.



mesaj birleştirme:: 22 Eylül 2016, 01:24:07


Sorun halloldu.

PHY Read/Write rutinimi hatalı yazmışım.

Paket alındığına dair int geldi.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Hocam MAC buloğu üzerinde olan bir MCU kullanalım. Bir de Phyter takalım öyle saldıralım.

Benimkisi de saldırır ama SPI trafiği çok yüksek. Bu sorun oluşturur mu?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

kralsam

Alıntı yapılan: z - 21 Eylül 2016, 20:03:50
MACADR0..5 registerlerinde bir anormallik var.

İnternete baktığımda aynı sorun başkalarının da başına gelmiş. Registerlara yazma okuma rutinim düzgün çalışıyor fakat MACADR registerlerinde bir saçmalık var.

MACADR0 ı okursam MACADR5'e yazdığım data geliyor.

Tüm MACADR registerleri  1 byte ötelenmiş.
Hocam bu problem gerbay hocamın big endian uyarısı ile ilgili olabilir mi?

z

#125
@gerbay hocam

Paket alındı interruptı üzerine, incelemek üzere RXBufferdan 256 byte veri çektim ve aşağıya ekledim.

Bu paket üzerine konuşabilirmiyiz?

Çip dokümanının 31. sayfasında Ethernet Packet Format var.
43. sayfada ise Sample Receive Packet Layout var.

Çip, gelen paketi aldıktan sonra gönderici ve alıcı adresleri ile type kısmını vs ayıklıyor bana sadece  Data kısmını seçip buffera yazıyor. Doğrumudur?

Aşağıdaki ilk 70 byte'ı açıklayabilirmisin?  (xx olarak yazdığım alanda modemin MAC adresi olduğunu farkedip yayınlamak istemedim.)


46 00 40 00 C0 03 FF FF FF FF FF FF xx xx xx xx
xx xx 08 06 00 01 08 00 06 04 00 01 xx xx xx xx
xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8 01 17
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 11 8B 32 C5 8C 00 40 00 C0 03 FF FF FF FF
FF FF xx xx xx xx xx xx 08 06 00 01 08 00 06 04
00 01 xx xx xx xx xx xx C0 A8 01 01 00 00 00 00
00 00 C0 A8 01 16 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 49 0B D0 12 D2 00 40 00
C0 03 FF FF FF FF FF FF xx xx xx xx xx xx 08 06
00 01 08 00 06 04 00 01 xx xx xx xx xx xx C0 A8
01 01 00 00 00 00 00 00 C0 A8 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 BB
AC 4B 18 01 40 00 C0 03 FF FF FF FF FF FF xx xx
xx xx xx xx 08 06 00 01 08 00 06 04 00 01 xx xx
xx xx xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8


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

@kralsam

O problem çözüldü.

ETH registerlerini okumak için ayrı bir fonksiyon
MAC-MII registerlerini okumak için ayrı bir fonksiyon yazmanız gerekiyor.

MAC-MII registerlerini ETH registeri okur gibi okumuşum o yüzden o problemle karşılaştım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

#126
http://sadjad.me/phd/

@z Hocam, şurdaki forma yapıştırıp bi bakarmısınız? Sanırım böyle biraz anlam kazanıyor veriler. Ben xx'leri 00 yaptım Enter'ları da Space'e dönüştürdüm, okudu veriyi. Ama tabii ben anlamadım sonuçlarını. Belki işinize yarar.

z

#127
Tam lazım olduğunda Gerbay ortalıkta yok

Sanırım birazını yorumlayabilirim.

İlk 2 byte 0x0046 bir sonraki paketin hangi adrese yazılacağını söylüyor.   Yani bu paket 70 byte diyebiliriz. 0x46 - 0x00 = 0x46 = 70 Decimal
Sonraki 2 byte 0x0040
Sonraki 2 byte 0x03C0

2'nci 16.bıt veri ise dataların uzunluğu yani 64 Byte data varmış.
3'üncü 16 bit veri yani 0x03C0 bir flag ve sayfa 44 de açıklanmış.

Baştaki bu 6 Byte'a ilave olarak  64 byte da data varmış Yani toplamı 70 Byte.

64 Byte verinin 4 byte'ı da CRC olduğuna göre aslında benim 60 byte verim var.

0x03C0 flağı hoşuma gitmedi. Bu bitlere göre 
Alınan paket Broadcast ve Multicast adrese sahip
Received Ok
Length Out of Range var !!!!! Niyeki?  

Daha sonra data kısmında Alıcı Adres 0xFFFFFFFF (Broadcast yayın)
Gönderici adres (xx olarak değiştirdiğim modemimin MAC adresi)

Sonraki  0806 Gerbayın bahsettiği meşhur 806 olabilir.  (0x0806 ARP) ve (0x0800 IP protokolü) demişti.

Evet evet bu kesinlikle Gerbay'ın bahsettiği ARP paketi

Address Resolution Protocol (Adres çözümleme protokolü)

08 06 00 01 08 00 06 04 00 01 xx xx xx xx xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8 01 17

Bu kısmı ARP için yorumlayalım  (https://tr.wikipedia.org/wiki/Adres_Çözümleme_Protokolü)

0806 ARP
Hardware Tipimiz  0x0001 yani Ethernet
Protokol Adres Tipimiz 0x0800 yani IP adesleme
Donanım Adres Uzunluğumuz 0x06  yani 6 byte
Protokol Adres Uzunluğu 0x04 IPV4 4 Byte adres kullanır diyor
Operasyon 0x0001 (istek için 1, cevap için 2, RARP isteği için 3 ve RARP cevap için 4)  ARP Response isteniyor diyebilirmiyiz?
Gönderen Donanım Adresi:  Benim modemin adresi xx diye değiştirmiştim. (SHA) Sender Hardware Address
Gönderen Protokol Adresi:  0xC0A80101      (SPA) Sender Protocol Address
Hedef Donanım Adresi:       0x0000000000  (THA) Target Hardware Address
Hedef Protokol Adresi:        0xC0A80117      (TPA) Target Protocol Address

Daha sonra data boyunu 60 byte'a tamamlamak için eklenmiş boş sıfırlar

Enson da CRC: 11 8B 32 C5

Sonra alınan 2. Paket geliyor. Onu şimdi incelemeyeceğim. Çünkü yukarıdaki paketi alır almaz gereğini yerine getirmem gerekecek. Sonra sı Allah kerim.


46 00 40 00 C0 03 FF FF FF FF FF FF xx xx xx xx
xx xx 08 06 00 01 08 00 06 04 00 01 xx xx xx xx
xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8 01 17
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 11 8B 32 C5
8C 00 40 00 C0 03 FF FF FF FF
FF FF xx xx xx xx xx xx 08 06 00 01 08 00 06 04
00 01 xx xx xx xx xx xx C0 A8 01 01 00 00 00 00
00 00 C0 A8 01 16 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 49 0B D0 12 D2 00 40 00
C0 03 FF FF FF FF FF FF xx xx xx xx xx xx 08 06
00 01 08 00 06 04 00 01 xx xx xx xx xx xx C0 A8
01 01 00 00 00 00 00 00 C0 A8 01 01 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 BB
AC 4B 18 01 40 00 C0 03 FF FF FF FF FF FF xx xx
xx xx xx xx 08 06 00 01 08 00 06 04 00 01 xx xx
xx xx xx xx C0 A8 01 01 00 00 00 00 00 00 C0 A8


http://www-sop.inria.fr/members/Vincenzo.Mancuso/ReteInternet/09_arp.pdf
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

muhittin_kaplan

hocam bunları toplayacaksın değil mi bir yerde ?

z

Blog sitemde topluyorum pdf de yapacağım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

DEno_12

Vay be, ben bayağı heyecan yaptım. Olacak bu iş. Sizin gibi çılgın arkadaşlar da varmış.

http://www.microchip.com/forums/FindPost/420396

Siz bu işten sonra @gerbay hocamın önerdiği gibi RTOS'a da girer onu da full asm ile yazarsınız. Belki de dünyanın en optimize RTOS'u sizden çıkar.

Cemre.

Hocam veriyi siz özel olarak mı gönderdiniz? Yoksa hattaki herhangi bir cihazın rastgele bir zamandaki broadcast yayınını mı okudunuz?

z

#132
Kabloyu modeme bağladım.

STM32'yi  resetledim ve ilk gelen paketi daha doğrusu bufferdaki ilk 256 byt'ı okudum.

Bu arada STM'nin init rutinleri dahil tüm kodlar şu an 2040 Byte.



mesaj birleştirme:: 22 Eylül 2016, 18:10:03

MAC adresini 3. şahıslardan saklamalımıyız?

Mesela burda yayınlarsam kötü niyet olursa ne yapılabilir?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Cemre.

Alıntı yapılan: z - 22 Eylül 2016, 16:41:20
Kabloyu modeme bağladım.

STM32'yi  resetledim ve ilk gelen paketi daha doğrusu bufferdaki ilk 256 byt'ı okudum.

Bu arada STM'nin init rutinleri dahil tüm kodlar şu an 2040 Byte.



mesaj birleştirme:: 22 Eylül 2016, 18:10:03

MAC adresini 3. şahıslardan saklamalımıyız?

Mesela burda yayınlarsam kötü niyet olursa ne yapılabilir?

http://security.stackexchange.com/questions/67893/is-it-dangerous-to-post-my-mac-address-publicly

Hocam burada enine boyuna konuşulmuş. Bazı anektotlardan bahsedilmiş, ama genel kanı çokta problem olmayacağı yönünde. Bir de şu teknik bilgi var, sizin ağınızdaki cihazların MACleri sizin ağınızda kalır. Peki bizim modem'in MAC'i nerde kalır? Onu ben de bulamadım. Mesela benim komşu benim modemin MAC'ini bir şekilde kendi modemine gömüp internete çıkmaya kalksa Superonline bize küser mi?

AsHeS

Alıntı yapılan: z - 22 Eylül 2016, 16:41:20
Kabloyu modeme bağladım.

STM32'yi  resetledim ve ilk gelen paketi daha doğrusu bufferdaki ilk 256 byt'ı okudum.

Bu arada STM'nin init rutinleri dahil tüm kodlar şu an 2040 Byte.



mesaj birleştirme:: 22 Eylül 2016, 18:10:03

MAC adresini 3. şahıslardan saklamalımıyız?

Mesela burda yayınlarsam kötü niyet olursa ne yapılabilir?
Denemelerinizde MAC adresini 01:02:03:04:05 olarak kullanabilirsiniz. Ağınızda aynı MAC adresli kimse olmadığı sürece sıkıntı yok. Eğer IEEE den kendiniz alacaksanız adamlar firmaya tescilleyerek satıyor( min satış adeti 4096 ) dolayısı ile sizin MAC adresini biri kullanırsa davalık olursunuz.