«Driven обучения - пересадка DM9000C карты»

1. Во-первых, посмотрите на схематическом DM9000C

 

 (#: Указывает активный низкий уровень)

15 ~ SD0:  линии 16-битные данные, ЦМД контактный определяет тип доступа

ЦМД:       командной строки, когда ЦМД высока, что указывает на SD данных передачи, ЦМД указывает на низкий адрес передачи

INT:          прерывание контактов, затем 2440 футов в GPF7

IOR #:       Читать булавку, затем noé ноги в 2440

IOW #:      контактный писать, то NWe ноги в 2440

CS #:        выбор чипа, на bank4 2440 чипа выбрать выше

Отличающийся тем, что диапазон адресов 2440 1,1 bank4 руководство следующим образом:

 

 

Интервал bank4 расположен: 0x20000000 ~ 0X28000000 , когда мы посетить этот диапазон адресов, контроллер памяти позволит DM9000C карт разрешающего штифта, так что нашему DM9000C IO базового адреса = 0x20000000

DM9000C , в котором штифт соединен с CMD BANK4 LADDR2 выше

Например, когда адрес 0x2000 0000 при чтении и записи данных, данные , указывающие адреса считывания DM9000C

Адрес доступа 0x2000 0004 при чтении и записи данных, данные , представляющие данные для чтения является DM9000C

1.2 Процесс DM9000C Приемопередатчик

Когда DM9000C получить внешние данные, временно хранятся во внутренний адрес, а восходящая прерывание края генерируется, данные чтения ждать 2440

Когда DM9000C пересылает данные из 2440, он будет производить нарастающее прерывание от края до 2440

Показано, контакт прерывания DM9000C находится под ногой pin34

 

 

 

GPF7 2440 подключен к контакту, прерывание используется EINT7

Далее мы будем модифицировать исходный код, предоставленный производителем DM9000C

 

2. Установлено, что init_module () существует условная компиляция, прежде чем функция входа

 

 Поэтому я хочу , чтобы закомментировать  «#ifdef МОДУЛЬ»  и «#endif»

3. Изменить имя функции впускной и выпускной, и их модификации (другие функции с тем же именем, чтобы избежать изменений имени функции ядра)

 

 

 

 

 

4. Изменение аппаратным средствам привода несходство (набор регистров базового адреса, прерывания и т.д.)

4.1 Где первый смотреть на код для инициализации аппаратного DM9000C

Введите dm9000c_init ()

       -> dmfe_probe ()

структура net_device в __init dmfe_probe * ( аннулируются ) 
{ 
структура net_device * DEV, 

DEV = alloc_etherdev ( SizeOf ( структура board_info));           // выделить структуру net_device 
... ... 

ERR = dmfe_probe1 (Dev);                                  // называют dmfe_probe1 ( ) функция 
... ... 

ERR = register_netdev (DEV);                             // Зарегистрировать net_device структуру ядра 
... ... 
}

Очевидно, что dmfe_probe1) функция-член (используется для инициализации аппаратного и DM9000C, снабженной структурой net_device.

4.2 введите dmfe_probe1 () функцию

На следующей диаграмме, это то, что мы DM9000C iobase переменного И.О. базового адреса 0x20000000

 

 iobase роль:

Как было показано выше, перед чтением við DM9000C младших байт, первый адрес 0x20000000 назначаются, то есть, DM9000C CMD установлен в 0, то значение адресов записи для чтения DM9KS_VID_L к 0x20000000.

Затем конечный адрес +4, который присваивается 0x20000100, ЦМД устанавливается в 1, а затем считывает значение 0x20000100, который является ВИД DM9000C младший байт.

Чтение и запись DM9000C это, сначала CMD установлено в 0, то адрес записи DM9000C, CMD, а затем установить для чтения и записи данных.

4.3 iobase так сбросить переменную в функции инициализации, который является INT iobase

 

 И выйти из функции экспорта, добавить iounmp ()

4,4 продолжается в dmfe_probe1 () функцию, смотреть вниз

Как показано ниже, щит фиги коды красного поля, код используется для проверки версии, номер версии нашего DM9000C разные, поэтому к блоку

4,5 В функции инициализации, изменить имя прерывания, IRQ изменилась IRQ_EINT7

4,6 изменить прерывание

При использовании после register_netdev () зарегистрировал net_device драйвера сетевого адаптера, в использовании IFCONFIG ядра будет ввести net_device-> открытую функцию чтобы запросить перерыв, очередь активации и т.д.

Таким образом, мы должны изменить разомкнутого член функции прерывания функции приложения, то прерывание будет триггер изменен на «IRQT_RISING», поднимаясь по фронту

 

 

 

Следующий набор 2440 начинается регистр управления хранением

2440 bank4 аппаратных средств установить битые ширины, время, из-за различное аппаратное обеспечение, различные передачи и прием данных направлены

5.1 BWSCON регистр установлен Ширина шины управления

Мы только установить BANK4 содержание, только следующие три (BANK0 битовую ширину ОМ [1: 0] аппаратные настройки)

 

 

При условии , ST4 = 0 , не используется УБ / LB (УБ / LB: указывает ли передаются отдельно высокие и низкие байты данных)

При условии WS4 = 0 , где WAIT контактный PE4, и мы не DM9000C штырьковый доступа PE4, запрещается

Установите на DW4 = 0x01 , наши линии 16 данных DM9000C

5.2 Регистр управления Set BANKCON4

 

 Перед установкой времени, сначала посмотреть DM9000C чиповых схемы синхронизации по эксплуатации и схемы синхронизации 2440

 

 Со ссылкой на фигуру, составленный BANKCON4 регистр устанавливается следующим образом (HCLK = 100 МГц, 1 часов равна 10 нс)

  • Установите TACS = 0, так и CS ЦМД может заканчиваться в то же время (bank4 адрес (т.е. CMD) стабильным после долгого, чипа CS выбрать только начало)
  • При условии TCOS = T1 = 0 (после выбора микросхемы CS, сколько времени требуется для чтения и записи включена)
  • При условии Tacc = Т2> = 10ns = 1, представляет два часов (после цикла доступа, разрешение записи, сколько времени требуется, чтобы получить доступ к данным)
  • При условии, Tcoh = Т4> = 3 нс = 1, представляет собой часы, потому что сигнал записи, когда DM9000 отменен, линия данных должна исчезнуть по крайней мере 3 нс (отменен после Noe чтения, сколько времени необходимо для поддержания выбора микросхемы)
  • Установите Tcah = 0, так как CS и CMD может закончиться в то же время (после отмены CS выбора микросхемы, адрес (т.е. CMD) должен длиться долго)

Фигура ниже код, инициализация функция начального набора

 

 (PS: Если DM9000C не может водить машину, может быть Tacc время слишком мало, в результате чего меньше данных считывается, Tacc может быть установлен больше)

Часть связанных аппаратных средств меняется к лучшему, а затем начал компилировать

6. Испытание Compile

Перед компиляции сначала добавить ядра драйвера заголовков необходимо:

# include <ASM / delay.h> 
#include <ASM / irq.h> 
#include <Linux / irq.h> 
#include <ASM / io.h> 
#include <ASM / арка-S3C2410 / регс-mem.h >

После компиляции правильно, начал тестирование драйвера DM9000C:

1) ядро в / чистый каталог драйверов dm9dev9000c.c, чтобы заменить оригинальное ядро DM9000C

2)  изменить водителей / нетто / Makefile 

OBJ - $ (CONFIG_DM9000) + = dm9000.o
изменилось (как показано ниже)
OBJ - dm9dev9000c.o $ (CONFIG_DM9000) + =

 

 3)  сделать uImage

Ниже описан новый драйвер скомпилирован в ядро

 

 4)  с помощью новой загрузки ядра

Ifconfig eth0 192.168.2.107

пинг 192.168.2.1

Ниже, может свистеть каждую успешную трансплантацию

 

рекомендация

отwww.cnblogs.com/zhuangquan/p/11707197.html