реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> w3150 и внешняя память., HELP
Sarez
сообщение Mar 28 2007, 10:32
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Приветствую всех! Народ , помогите пожалуйста - может кто имел дело с аппаратным стеком w3150. Проект горит - дальше некуда, а я даже пингануть не могу.... Работает связка NM7010B ( модуль на основе W3150) и LPC2214. Модуль висит на CS2, BCFG2 настроил на минимальное быстродействие, работаю в IAR 4.40. Инициализацию регистров BCFG и PINSEL провожу в mac файле. Возникает ряд вопросов:
1) При соединении устройства с компьютером напрямую используется стандартный патч-корд, или же крос-овер?
2) Насколько я понимаю, работа со стеком проходит как работа с обычной внешней памятью. Для этого мне достаточно инициализировать корректными значениями регистр BCFG ? Или же необходимо выполнить еще какие-то действия, чтобы контроллер увидел стек?
3) Может кто работал с родным wiznetовским драйвером ( у меня версия 1.2 ). Подскажите пожалуйста в файле iinchip_conf.h в участке кода, где определяютя базовый адрес модуля и базовые адреса памяти приема и передачи ставить ставить нулевой адрес и соответственно COMMON_BASE + 0x4000 для TXBUF и соответственно COMMON_BASE + 0x6000 для RXBUF или же там стоит указывать в качестве базового адреса адрес 82000000 - начальный адрес для 2 блока внешней памяти, на адресах которого висит стек ? Т.е :

/**
* __DEF_IINCHIP_MAP_xxx__ : define memory map for iinchip
*/
#define __DEF_IINCHIP_MAP_BASE__ 0x8000 \\ какой адрес необходимо указать?
#if (__DEF_IINCHIP_BUS__ == __DEF_IINCHIP_DIRECT_MODE__)
#define COMMON_BASE __DEF_IINCHIP_MAP_BASE__
#else
#define COMMON_BASE 0x0000
#endif
#define __DEF_IINCHIP_MAP_TXBUF__ (COMMON_BASE + 0x4000) /* Internal Tx buffer address of the iinchip */
#define __DEF_IINCHIP_MAP_RXBUF__ (COMMON_BASE + 0x6000) /* Internal Rx buffer address of the iinchip */


Может быть у кого есть простейший вариант прошивки для арма? Хотя - бы чтобы можно было пингануть, убедится, что модуль жив? Или может у кого есть опыт - указать, что я неправильно делаю...Очень прошу помочь.....
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 28 2007, 11:07
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Я использовал wiznet подключенный к LPC2103 шина иммитировалсь софтом в индирект моде
Чтобы wiznet заработал и стал отвечать на пинги нужно только записать в него MAC и IP адреса
напрямую с компом конечно только кросс кабелем

Вот кусок инициализации
с wiznet ом очень удобно работать в indirect mode
здесь wzRead читает регистр данных wzWrite запсиывает, wzSetAddr устанавливает адрес
у меня еще к тому же было 2 wiznetа подсоеденино поэтому еще параметр chip есть просто биты чип селекта


Код
#ifndef __W3150_H__
#define __W3150_H__

#define WZ_MODE            0x00

#define WZ_GATEWAY         0x01
#define WZ_SUBNET          0x05
#define WZ_MAC             0x09
#define WZ_IP              0x0F

#define WZ_RXMEM_CFG       0x1A
#define WZ_TXMEM_CFG       0x1B

//Mode reg **************************
#define WZS_MODE           0x00
#define WZM_CLOSED         0
#define WZM_TCP            1
#define WZM_UDP            2
#define WZM_IPRAW          3
#define WZM_MACRAW         4
#define WZM_PPPoE          5

//Command reg ***********************
#define WZS_CMD            0x01
#define WZC_OPEN           0x01
#define WZC_LISTEN         0x02
#define WZC_CONNECT        0x04
#define WZC_DISCON         0x08
#define WZC_CLOSE          0x10
#define WZC_SEND           0x20
#define WZC_SENDMAC        0x21
#define WZC_SENDKEEP       0x22
#define WZC_RECV           0x40

//***********************************
#define WZS_INT            0x02
#define WZS_STA            0x03
#define WZS_SPORT          0x04
#define WZS_MAC            0x06
#define WZS_IP             0x0C
#define WZS_DPORT          0x10
#define WZS_TTL            0x16

#define WZS_TXFS           0x20
#define WZS_TXRD           0x22
#define WZS_TXWR           0x24

#define WZS_RXS            0x26
#define WZS_RXRD           0x28


typedef struct {
  uint8_t DefGateway[4];
  uint8_t IpMask[4];
  uint8_t Mac[6];
  uint8_t Ip[4];
  uint8_t MemCfg[2];
} wzFullStaticIpConfig;

#pragma inline=forced
uint8_t wzRead(void)
{
  uint_fast8_t r;
  RDOn();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  __no_operation();
  r=AD0_PORT;
  RDOff();
  return r;
}

#pragma inline=forced
void wzWrite(uint8_t d)
{
  AD0_PORT=d;
  __no_operation();
  WROn();
  __no_operation();
  __no_operation();
  __no_operation();
  WROff();
}

#pragma inline=forced
void wzSetAddr(unsigned addr,unsigned chip, bool read)
{
  A0_PORT=chip | (1<<A0_PIN);
  FIO0DIR2=0xFF;
  wzWrite(addr);
  A0_PORT=chip | (1<<A1_PIN);
  wzWrite(addr>>8);
  A0_PORT=chip | (1<<A1_PIN) | (1<<A0_PIN);
  if (read) FIO0DIR2=0x00;
}

#pragma inline=forced
static void wzFullStaticInit(const wzFullStaticIpConfig *Cfg, unsigned chip)
{
  uint8_t  *tmp;
  uint8_t Len;

  A0_PORT=chip;
  FIO0DIR2=0xFF;
  wzWrite(0x80);
  wzWrite(0x07);
  wzSetAddr(WZ_GATEWAY,chip,false);
  tmp=(uint8_t *)Cfg;
  Len=18;
  do {
    wzWrite(*tmp++);
  }while(--Len);
  wzSetAddr(WZ_RXMEM_CFG,chip,false);
  wzWrite(*tmp++);
  wzWrite(*tmp++);
}

/#endif /*__W3150_H__*/
Go to the top of the page
 
+Quote Post
Sarez
сообщение Mar 28 2007, 11:18
Сообщение #3


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



to KRS:
Спасибо большое!!!! Сейчас буду пробовать.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 28 2007, 12:25
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Sarez @ Mar 28 2007, 10:18) *
Спасибо большое!!!! Сейчас буду пробовать.
Обратите внимание (сам на это налетел): У ARM многобайтовые переменные хранятся в формате Little Endian(младший байт по меньшему адресу) а у визнета - Big Endian. Т.е. даже если вы его повесите как внешнюю память, то писать все равно придется побайтно или перед записью перетасовывать байты. Это относится и к 4-байтным указателям и к регистрам IP-адресов и к регистрам портов. Вот моя инициализация для LPC2214 (визнет висит на CS3):
Код
    BCFG3 = (0<<LPC_IDCY) | (0x7<<LPC_WST1) | (0<<LPC_RBLE) | (0x7<<LPC_WST2) | (0<<LPC_WP) | (0<<LPC_BM) | (0<<LPC_MW); // задержки можно уменьшать, не было времени проверить.
   {
        uint32_t Tmp = PINSEL2 & (0xF00C160F);
        PINSEL2 = Tmp |
            (1UL<<2)|            //P1[26..31] = JTAG
            (0UL<<3)|            //P1[16..25] = GPIO
            (1UL<<4)|            // P2.[0..15] = D[0..15], P1.0 = CS0, P1.1 = OE, P3.31 = BLS0, P3.30 = BLS1,
                                // P2[16..29] = GPIO, P2[30, 31] = GPIO/AN, P3[28, 29] = GPIO/AN
            (0UL<<6)|(0UL<<7)|    // P3.29 = GPIO, P3.28 = GPIO
            (1UL<<8)|            // P3.27 = WE
            (1UL<<11)|            // P3.26 = CS1
            (0UL<<13)|            // P3.23 = GPIO
        //    (1UL<<14)|            // P3.25 = CS2
            (1UL<<16)|            // P3.24 = CS3
            (0UL<<20)|(0UL<<21)|(0UL<<22)|    // P2[28..31] = GPIO
            (1UL<<23)|(1UL<<24)|    //P3.0 = A0, P3.1 = A1
            (6UL<<25);            //P3[2..19] = A[2..19]
    }


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Sarez
сообщение Mar 28 2007, 12:44
Сообщение #5


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Спасибо большое!!!! А Вы не могли бы подсказать, как быть с адресами, т.е в файле инициализации чипа в качестве его базового адреса указывать 0x0000 или же начальный адрес внешнего блока памяти - 0x82000000?

Сообщение отредактировал Sarez - Mar 28 2007, 12:55
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 28 2007, 12:53
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Sarez @ Mar 28 2007, 11:44) *
0x0000 или же все таки 0x82000000 - начальный адрес внешнего блока памяти 2?
Конечно 0x82000000.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Sarez
сообщение Mar 28 2007, 13:03
Сообщение #7


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Спасибо большое!!!
Go to the top of the page
 
+Quote Post
Sarez
сообщение Mar 29 2007, 15:20
Сообщение #8


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Скажите пожалуйста, а как на Wiznet должны быть заведены управляющие сигналы? У меня в схеме разведено так :
WE ( от контроллера ) - WR ( стека )
OE ( от контроллера ) - RD (стека )
CS2 ( от контроллера ) - CS ( стека )

Сунулся в User Manual lpc 2214 - там на странице 45 указан интерфейс с внешним 8 разрядным блоком памяти :
CS - CE
OE - OE
BLS[0] - WE

Получается что мой вариант неправильный ? Т.е если рассматривать Wiznet как блок внешней 8 разрядной памяти , то вместо WR от контроллера на стек должен иди BLS [0]. Обьясните пожалуйста....
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 29 2007, 15:40
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Sarez @ Mar 29 2007, 14:20) *
вместо WR от контроллера на стек должен иди BLS [0]. Обьясните пожалуйста....
Да.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Sarez
сообщение Mar 29 2007, 15:44
Сообщение #10


Частый гость
**

Группа: Новичок
Сообщений: 75
Регистрация: 17-08-06
Из: Минск
Пользователь №: 19 630



Спасибо!!!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01441 секунд с 7
ELECTRONIX ©2004-2016