Вопросы по программированию стенда SDK-2.0

Учебный лабораторный комплекс SDK-2.0 на базе микроконтроллера LPC2292 с ядром ARM7TDMI-S # CAN 2.0, RS-485, RS-232, Ethernet 10/100Base-TX, IEEE 802.15.4 (ZigBee)

Re: Вопросы по программированию стенда SDK-2.0

Сообщение OYTIS » 27 мар 2009, 18:28

Спасибо, скорее всего, дело именно в этом. Завтра постараюсь проверить.
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

Re: Вопросы по программированию стенда SDK-2.0

Сообщение OYTIS » 28 мар 2009, 18:14

Да, теперь все работает. До "Hello, world!" осталось только нарисовать шрифты =)
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

Re: Вопросы по программированию стенда SDK-2.0

Сообщение OYTIS » 20 апр 2009, 18:11

Еще вопрос по BCFG. Из каких соображений можно установить его для контроллера Ethernet? Сейчас он устанавливается в 0x1000FFEF, и при записи всё, кажется, благополучно (по крайней мере, есть основания полагать, что сеть отвечает мне именно на DHCP-запрос, который я делал), а при чтении постоянно бьются байты - часто в адресе назначения или типе кадра, но некоторые доживают и до того, чтобы быть распознанными, как ответы dhcp-сервера (правда, некорректные=) ). С учетом того, что promiscous mode у меня отключен, да и ошибки CRC контроллируются, есть подозрение, что бьются байты именно при чтении из памяти контроллера. Отсюда, собственно, и вопрос.
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

Re: Вопросы по программированию стенда SDK-2.0

Сообщение invaisor » 20 апр 2009, 21:19

OYTIS писал(а):Еще вопрос по BCFG. Из каких соображений можно установить его для контроллера Ethernet? Сейчас он устанавливается в 0x1000FFEF, и при записи всё, кажется, благополучно (по крайней мере, есть основания полагать, что сеть отвечает мне именно на DHCP-запрос, который я делал), а при чтении постоянно бьются байты - часто в адресе назначения или типе кадра, но некоторые доживают и до того, чтобы быть распознанными, как ответы dhcp-сервера (правда, некорректные=) ). С учетом того, что promiscous mode у меня отключен, да и ошибки CRC контроллируются, есть подозрение, что бьются байты именно при чтении из памяти контроллера. Отсюда, собственно, и вопрос.

Если честно, то с Ethernet на SDK-2.0 я особо не разбирался. Но думаю, что не плохо бы попробовать следующий вариант BCFG1 = 0x10000C23. Не уверен, что он работает.
Если все равно не работает, то разбираться со связкой user manual по LPC2292 + hardware manual + SMSC LAN91C111. Кроме того, неплохо было бы посмотреть по гуглю по поводу связи SMSC LAN91C111 с микроконтроллерами. SMSC LAN91C111 достаточно популярен.
Аватара пользователя
invaisor
 
Сообщения: 227
Зарегистрирован: 08 апр 2008, 16:08

Re: Вопросы по программированию стенда SDK-2.0

Сообщение OYTIS » 22 апр 2009, 00:46

Да, дело точно в чтении из памяти. При чтении данных из 91С111 по одному и тому же адресу три раза подряд могут читаться разные числа (притом результаты первого и третьего чтения всегда совпадают - возможно, если увеличить количество чтений, можно найти закономерность =) ).
Пробовал 0x10000C23 и свой вариант - 0x18002443 (burst mode, read and write cycle - 5*CCLK). Контроллер проявлял показное равнодушие. Я правильно понимаю, что при PLLCFG = 0x23 частота процессора равна 48 МГц, и тогда 100 нс (указано в FAQ от SMSC) - это 5*CCLK?
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

Re: Вопросы по программированию стенда SDK-2.0

Сообщение invaisor » 22 апр 2009, 10:28

OYTIS писал(а):Пробовал 0x10000C23 и свой вариант - 0x18002443 (burst mode, read and write cycle - 5*CCLK). Контроллер проявлял показное равнодушие. Я правильно понимаю, что при PLLCFG = 0x23 частота процессора равна 48 МГц, и тогда 100 нс (указано в FAQ от SMSC) - это 5*CCLK?

Да, вычисления правильны. Как вариант можно попробовать значение типа 0x1003501, кроме этого стоит проверить все ли остальные настройки сделаны верно (PINSELECT2, CS).
В тестовых примерах для стенда (под Keil) есть инициализация и использование Ethernet.
Вложения
hw_tests_sdk_2_0_v1.2.rar
тестовая прошивка
(348.52 Кб) Скачиваний: 598
Аватара пользователя
invaisor
 
Сообщения: 227
Зарегистрирован: 08 апр 2008, 16:08

Re: Вопросы по программированию стенда SDK-2.0

Сообщение OYTIS » 24 апр 2009, 15:30

Самое безопасное значение BCFG1 (однако, не самое эффективное, разумеется) - 0x1000FFEF. Откатился пока до него и обнаружил две вещи:
- то, что при двух последовательных чтениях по одному адресу можно получить разные значения - результат prefetch'а. Просто, при других значениях BCFG1 это не всегда заметно =)
- самое главное - читать нужно ETH_DATA0, а ETH_DATA1 - в ETH_DATA0 может оказаться результат того самого prefetch'а. А может не оказаться. Я не знаю, почему - согласно документации и здравому смыслу по обоим адресам должно быть одно и то же значение.
Ошибки еще не кончились, эксперименты продолжаются.

UPD:
Испраление ETH_DATA0 на ETH_DATA1 кажется достаточно универсальным средством борьбы с ошибками. Не знаете, есть какой-нибудь errata sheet (возможно, неофициальный) по 91С111? Официальное предложение "сontact your local SMSC representative" меня не радует.
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

Re: Вопросы по программированию стенда SDK-2.0

Сообщение invaisor » 24 апр 2009, 17:58

OYTIS писал(а):Самое безопасное значение BCFG1 (однако, не самое эффективное, разумеется) - 0x1000FFEF. Откатился пока до него и обнаружил две вещи:
- то, что при двух последовательных чтениях по одному адресу можно получить разные значения - результат prefetch'а. Просто, при других значениях BCFG1 это не всегда заметно =)
- самое главное - читать нужно ETH_DATA0, а ETH_DATA1 - в ETH_DATA0 может оказаться результат того самого prefetch'а. А может не оказаться. Я не знаю, почему - согласно документации и здравому смыслу по обоим адресам должно быть одно и то же значение.
Ошибки еще не кончились, эксперименты продолжаются.

UPD:
Испраление ETH_DATA0 на ETH_DATA1 кажется достаточно универсальным средством борьбы с ошибками. Не знаете, есть какой-нибудь errata sheet (возможно, неофициальный) по 91С111? Официальное предложение "сontact your local SMSC representative" меня не радует.

Какой-то errata sheet точно есть, но где его взять я не знаю. :unknown: Подождем, может быть кто из непосредственных разработчиков SDK-2.0 отпишется где взять errata на 91C111.
Нашел интересное сообщение про [patch] fix odd byte problem on smsc91c111 revision 0 chips.
Аватара пользователя
invaisor
 
Сообщения: 227
Зарегистрирован: 08 апр 2008, 16:08

Re: Вопросы по программированию стенда SDK-2.0

Сообщение Shico » 25 апр 2009, 15:06

Господа исследователи Ethernet'а стенда SDK-2.0!

Вы не пробовали найти ответы на свои вопросы в соседней теме: http://embedded.ifmo.ru/forum/viewtopic.php?f=3&t=112&start=0#p1129
Там пример про Ethernet лежит уже почти год! Вполне рабочий.
"Раньше гусиными перьями писали вечные мысли, а теперь вечными перьями пишут гусиные мысли". В. Солоухин
Аватара пользователя
Shico
 
Сообщения: 301
Зарегистрирован: 06 апр 2008, 16:15
Откуда: Санкт-Петербург

Re: Вопросы по программированию стенда SDK-2.0

Сообщение invaisor » 25 апр 2009, 15:50

Shico писал(а):Господа исследователи Ethernet'а стенда SDK-2.0!

Вы не пробовали найти ответы на свои вопросы в соседней теме: http://embedded.ifmo.ru/forum/viewtopic.php?f=3&t=112&start=0#p1129
Там пример про Ethernet лежит уже почти год! Вполне рабочий.

Ну ссылку на hw_tests_sdk_2_0_v1.2.rar я давал, а тот что в соседней теме я, надеюсь, тоже был замечен :smile:
Вопрос в том, где найти errata на SMSC LAN91C111?
Аватара пользователя
invaisor
 
Сообщения: 227
Зарегистрирован: 08 апр 2008, 16:08

Re: Вопросы по программированию стенда SDK-2.0

Сообщение Shico » 25 апр 2009, 16:20

Все таки я не понимаю зачем вам errata. То есть, само по себе желание ознакомиться со списком ошибок какого-либо устройства - это очень правильно. Но в данном случае, по-моему, имеет место быть неправильная настройка устройства. Наличие вполне рабочего примера (см. выше) на это указывает. По пробуйте взять настройки из него.
Кстати, этот пример сделан позднее чем hw_tests_sdk_2_0_v1.2.rar. Так что там могли быть исправлены какие-нибудь ошибки. Было это давно - сейчас точно вспомнить не могу.
"Раньше гусиными перьями писали вечные мысли, а теперь вечными перьями пишут гусиные мысли". В. Солоухин
Аватара пользователя
Shico
 
Сообщения: 301
Зарегистрирован: 06 апр 2008, 16:15
Откуда: Санкт-Петербург

Re: Вопросы по программированию стенда SDK-2.0

Сообщение OYTIS » 25 апр 2009, 19:41

Я с этого примера начинал. Он не работает - ответственно заявляю. То есть, я готов поверить, что он что-то пишет на шину и что-то с нее читает, но не более того.
Errata sheet мне лично больше не нужен - отладка драйвера 91с111, кажется, завершена, и сегодня сервер выдал первую страницу, но вот будущим поколениям мог бы пригодиться.

UPD:
И все-таки, различные результаты чтения из ETH_DATA0 и ETH_DATA1 имеют место быть, и это аппаратная ошибка. Т.е. даже не недокументированная особенность, а особенность, прямо противоречащая документации.
OYTIS
 
Сообщения: 76
Зарегистрирован: 22 апр 2008, 12:11

Re: Вопросы по программированию стенда SDK-2.0

Сообщение Shico » 25 апр 2009, 23:06

OYTIS писал(а):Я с этого примера начинал. Он не работает - ответственно заявляю. То есть, я готов поверить, что он что-то пишет на шину и что-то с нее читает, но не более того.


Если Вы ожидали от этого примера развертывания на SDK-2.0 Web-сервера, то, да - он не работает. Так как этот пример демонстрирует именно запись пакетов на шину и чтение всех пакетов с шины. Пакеты, которые он генерирует замечательно отлавливаются сетевыми анализаторами. Пример реализует исключительно канальный уровень стека протоколов. А уж все что выше - пожалуйста, творите.
"Раньше гусиными перьями писали вечные мысли, а теперь вечными перьями пишут гусиные мысли". В. Солоухин
Аватара пользователя
Shico
 
Сообщения: 301
Зарегистрирован: 06 апр 2008, 16:15
Откуда: Санкт-Петербург

Re: Вопросы по программированию стенда SDK-2.0

Сообщение Al1enKenny90 » 20 мар 2012, 12:35

Пример программы, реализующей CAN на SDK 2.0. При выполнении программы на осциллографе не наблюдается сигналов похожих на сообщение (резистор 120 Ом на выходе поставлен). В программе функция printreg реализует вывод значения регистра C2SR на LCD. Значение данного регистра находятся в прикрепленном txt-файле. Просьба посмотреть и указать ошибки.
Код: Выделить всё
/**-----------------------------------------------------------------------------
Проект:     SDK-2.0
Название:   Головная программа.
Файл:       main.c
Версия:     1.0.1
-----------------------------------------------------------------------------*/
#include <lpc2292.h>
#include <init.h>
#include <systimer.h>
#include <lcd.h>
#include <stdlib.h>
//#define N                  122
#define CAN0 0 // Определение двух CAN-контроллеров
#define CAN1 1

#define L_0 0
#define L_1 1
#define L_2 2
#define L_3 3
#define L_4 4
#define L_5 5
#define L_6 6
#define L_7 7
#define L_8 8
#define L_9 9
#define L_T 10
#define L_R 11
#define L_X 12
#define L_H 13
#define L_F 14
#define L_E 15
#define L_rav 16
#define L_sl 17
#define L_S 18
unsigned char Letters[20][6]={
{0,124,130,130,130,124},{0,0,8,4,254,0},{0,228,162,162,146,140},{0,68,130,146,146,108},{0,48,40,36,242,32},{0,64,158,146,146,98},{0,124,146,146,146,96},{0,2,226,18,10,6},{0,108,146,146,146,108},{0,12,146,146,146,124},
{0,2,2,126,2,2},{0,127,9,25,41,70},{0,66,36,24,36,66},{0,127,16,16,16,127},{0,126,9,9,9,0},{0,126,74,74,74,0},{0,40,40,40,40,40},{0,16,16,124,56,16},{0,76,146,146,146,100}};

unsigned char cur_N;

unsigned char cur_H;

//unsigned char st[ N ];
//unsigned char vel[ N ];
//unsigned char cur_vel[ N ];
//unsigned char pos[ N ];
//unsigned char cur_pos[ N ];
///////////////////////////////////////////////////////////////////////////////
//
///////////////////////////////////////////////////////////////////////////////
/*void init_m( void )
{
   unsigned char i;

   for ( i = 0; i < N; i++ )
   {
      cur_pos[ i ] = 0;
      cur_vel[ i ] = 0;
      pos[ i ] = 3 + rand() % 30;
      vel[ i ] = 10 + rand() % 40;
      st[ i ] = 1;
   }
}
*/
///////////////////////////////////////////////////////////////////////////////
//Func PRINT
///////////////////////////////////////////////////////////////////////////////
void print( unsigned char X,  unsigned char Y,unsigned char Letter)
{
unsigned char i, j;
unsigned char z;

z=Letters[Letter][0];
   i=0;
   for(j=0; j<8; j++)
      {
      put_pixel( i+6*X, j+8*Y, z&1);
      z>>=1;
      }
z=Letters[Letter][1];
   i=1;
   for(j=0; j<8; j++)
      {
      put_pixel( i+6*X, j+8*Y, z&1);
      z>>=1;
      }      
z=Letters[Letter][2];
   i=2;
   for(j=0; j<8; j++)
      {
      put_pixel( i+6*X, j+8*Y, z&1);
      z>>=1;
      }
z=Letters[Letter][3];
   i=3;
   for(j=0; j<8; j++)
      {
      put_pixel( i+6*X, j+8*Y, z&1);
      z>>=1;
      }
z=Letters[Letter][4];
   i=4;
   for(j=0; j<8; j++)
      {
      put_pixel( i+6*X, j+8*Y, z&1);
      z>>=1;
      }   
z=Letters[Letter][5];
   i=5;
   for(j=0; j<8; j++)
      {
      put_pixel( i+6*X, j+8*Y, z&1);
      z>>=1;
      }                                    
}

///////////////////////////////////////////////////////////////////////////////
//Func PRINTreg
///////////////////////////////////////////////////////////////////////////////
void printreg( unsigned int h )
{
unsigned long reg,l,o;
unsigned char data[10];
reg=C2SR;
for(l = 0; l < 9; l++)
   {
   data[l]=(reg%10);
   reg /=10;
   }

for(o=9; o>0; o--)
   print(9-o,h,data[o]);
   print(9,h,data[0]);
}
///////////////////////////////////////////////////////////////////////////////
//Func PRINTchislo
///////////////////////////////////////////////////////////////////////////////
void printcheslo( unsigned long cheslo, unsigned int dk )
{
unsigned long v,k,t,dl;
unsigned char datas[20];
dl=dk;
dl=dl+cur_N;
for(v = 0; v < dk+1; v++)
   {
   datas[v]=(cheslo%10);
   cheslo /=10;
   }
//for(t=0; t<4; t++)
//   {
   for(k=dl; k>cur_N; k--)
   print(dl+cur_N-k-1,0,datas[k-cur_N]);
   print(dl-1,0,datas[0]);
   //}
cur_N=dl+1;

///////////////////////////////////////////////////////////////////////////////
// Func Main
///////////////////////////////////////////////////////////////////////////////
void main( void )
{
unsigned long t, k, i, j;
unsigned long ff,ii,tttt,x;
unsigned char data[10];
ii= 0;


VPBDIV = 0X00000001;      //Устанавливаем Pclk=60МГц
//IO0DIR |= 0xffffffff;       // Переключаем порт ввода-вывода на вывод
//IO0CLR |= 0xffffffff;       // Выдаем в порт ввода-вывода логический «0»
   
IODIR1 = 0Xffffffff;        //Все порты - выходы
PINSEL1 = 0x15410000;      //P0.24 - TD2 (CAN2 Controller) TX

C2MOD = 0x00000001;         //Переводим контроллер CAN в состояние сброса
C2GSR = 0x00000000;
C2BTR = 0x001C001D;         //Устанавливаем  скорость передачи 125 Кбит/с
C2MOD = 0x00000000;         //Запускаем контроллер CAN
/*
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000000;
IODIR0 = 0x00000000;
IODIR1 = 0x00000000;
IOSET0 = 0x00000000;
IOSET1 = 0x00000000;
   
IO0DIR = 0x00000000;
IO1DIR = 0x00000000;
IO2DIR = 0x00000000;
IO3DIR = 0x00000000;
   
IO0SET = 0x00000000;
IO1SET = 0x00000000;
IO2SET = 0x00000000;
IO3SET = 0x00000000;
*/      
PINSEL0     |=        0x5 | 0x2<<8|0x2<<10;
PCONP       |=      0x1<<13 | 0x1<<14;
printreg(0);            //Выводим на экран значение регистра C2SR   

init_system();
clear_lcd( 0 );



C2TFI1 = 0x00040000;      //Задаём DLC, равный 4 байтам
C2TID1 = 0x00000002;         //Устанавливаем адрес 0x22(стандартный кадр)         
printreg(1);            //Выводим на экран значение регистра C2SR


while ( 1 )
0
{

printreg(2);            //Выводим на экран значение регистра C2SR
//Моргание диода для проверки срабатывания цикла                  
   IO0SET |= 0x00100000; // Выдаем в порт ввода-вывода логическую «1»
   for   (ff=0;ff<900000; ff++);
   IO0CLR |= 0x00100000;       // Выдаем в порт ввода-вывода логический «0»       
   for   (ff=0;ff<900000; ff++);

if(C2SR & 0x00000004)         //Проверяем, свободен ли 1-й буфер передачи
   {
   for   (ff=0;ff<9000000; ff++);
   C2TDA1 = 0x00000001;               //Копируем требуемые данные в первые 4 байта
   C2CMR = 0x00000021;            //Передаем сообщение
   }
printreg(3);            //Выводим на экран значениерегистра C2SR
}
}
Вложения
Значения регистра C2SR.txt
(1.02 Кб) Скачиваний: 393
SDK_2_0_CAN.rar
Проект
(64.41 Кб) Скачиваний: 513
Al1enKenny90
 
Сообщения: 5
Зарегистрирован: 15 фев 2012, 07:25

Re: Вопросы по программированию стенда SDK-2.0

Сообщение cotara » 18 май 2014, 17:47

Есть тут еще кто живой?
Хотел спросить что там с Ethernet.
Пытаюсь реализовать стек TCP/IP ну или хотя бы UDP, но затыкаюсь на канальном уровне...
Ни как не могу понять в чем разница между DATA0 и DATA1.
В примерах которые есть функция приема вообще по-моему не правильно написана.
В общем, кто чего-то достиг, отпишитесь.
Спасибо!
cotara
 
Сообщения: 1
Зарегистрирован: 18 май 2014, 17:42

Пред.

Вернуться в SDK 2.0

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron