Устройство записи и чтения данных из Flash-памяти
Содержание
Техническое задание
Введение
Общая структура универсальной последовательной шины
Разработка структурно-функциональной схемы
Составление принципиальной схемы
Программа для Usb контроллера
Программа для контроллера ADuC812
Заключение
Приложение
Техническое
задание
Целью данной курсовой работы является спроектировать
микропроцессорное устройство которое будет записывать и читать данные из памяти
FLASH типа, а также осуществлять взаимодействие с персональным компьютером по
средством универсальной последовательной шины (USB).
Введение
В связи с бурным развитием микроэлектроники стали появляться
все более сложные и более функциональные микроконтроллеры. Микроконтроллеры
известных фирм-производителей окружают нас везде: в таксофонных аппаратах, автомобильных
сигнализациях, музыкальных центрах, телевизорах, всевозможных играх и другой
как бытовой, так и промышленной технике. Микроконтроллеры стали поддерживать
самые разнообразные функции, стандарты. Например, стандарт протокола USB,
работа с большим объемом памяти, слежение за технологическими процессами и
многое другое. Микроконтроллер это основной компонент помогающий связать
персональный компьютер с каким-либо устройством.
Общая структура микроконтроллера ADuC812.
· аналоговые каналы ввода-вывода,
· высокоточный 8-ми канальный 12-ти
разрядный АЦП,
· прямой доступ к памяти для
высокоскоростного режима сбора данных с АЦП в ОЗУ,
· два 12-разрядных ЦАП,
· 8кб встроенной Flash-памяти программ,
· 640б встроенной Flash-памяти данных,
· встроенные подтягивающие резисторы,
· 256б встроенной ОЗУ данных,
· адресация 16Мб внешней памяти данных,
· адресация 64кб внешней памяти программ.
· совместимое ядро с семейством 8051
· номинальная частота тактового генератора
12 МГц (максимальная частота 16 МГц),
· три 16-разрядных таймера-счётчика,
· 32 программируемых линий ввода-вывода,
· высокая нагрузочная способность порта 3,9
источников прерываний с 2 уровнями прерываний.
· предназначен для работы от 3 и 5 вольт,
· нормальный режим, режим пониженного
энергопотребления и выключение питания.
· последовательный интерфейс УАПП,
· 2-х проводной последовательный интерфейс
(I2C-совместимый) и SRI интерфейс,
· сторожевой таймер,
· монитор электропитания.- полностью
интегрированная 12-разрядная система сбора данных, включающая высокую
эффективность, калибруемый многоканальный аналого-цифровой преобразователь, два
12-разрядных ЦАП и программируемый (8051-совместимый) 8-разрядный основной блок
управления в одном кристалле.
Дополнительные функции поддержки основного блока управления
включают сторожевой таймер, монитор электропитания и функции прямого доступа в
память аналого-цифрового преобразователя.32 программируемых линии ввода-вывода,
I2C-совместимые, SPI и стандартный УАПП предназначены для многопроцессорных
интерфейсов и расширения линий ввода-вывода.
Три режима управления электропитанием для аналоговых
конвертеров предназначенных для построения гибких схем управления питанием,
подходящие для устройств малой мощности.
flash память запись чтение
Общая
структура универсальной последовательной шины
USB обеспечивает одновременный обмен данными между хост-компьютером
и множеством периферийных устройств (ПУ). Распределение пропускной
способности шины между ПУ планируется хостом и реализуется им с помощью посылки
маркеров. Шина позволяет подключать, конфигури ровать, использовать и отключать
устройства во время работы хоста и самих устройств.
Система USB разделяется на три уровня с определенными
правилами взаимодействия. Устройство USB содержит интерфейсную часть, часть
устройства и функциональную часть.
- Физическое устройство USB - устройство на шине,
выполняющее функции, интересующие конечного пользователя.
- Client SW - ПО, соответствующее
конкретному устройству, исполняемое на хост-компьютере. Может являться
составной частью ОС или специальным продуктом.
- USB System SW - системная поддержка USB,
независимая от конкретных устройств и клиентского ПО.
- USB Host Controller - аппаратные и программные
средства для подключения устройств USB к хост-компьютеру.
Каждое устройство USB представляет собой набор независимых конечных
точек (Endpoint), с которыми хост-контроллер обменивается информацией.
Конечные точки описываются следующими параметрами:
- требуемой частотой доступа к шине и
допустимыми задержками обслуживания;
- требуемой полосой пропускания канала;
- номером точки;
- требованиями к обработке ошибок;
- максимальными размерами передаваемых и
принимаемых пакетов;
- типом обмена;
- направлением обмена (для сплошного и
изохронного обменов).
USB поддерживает как однонаправленные, так и двунаправленные
режимы связи. Передача данных производится между ПО хоста и конечной точкой
устройства. Устройство может иметь несколько конечных точек, связь с каждой из
них (канал) устанавливается независимо.
Все обмены (транзакции) по USB состоят из трех пакетов.
Каждая транзакция планируется и начинается по инициативе контроллера,
который посылает пакет-маркер {Token Packet). Он описывает тип и
направление передачи, адрес устройства USB и номер конечной точки. В каждой
транзакции возможен обмен только между адресуемым устройством (его конечной
точкой) и хостом. Адресуемое маркером устройство распознает свой адрес и
готовится к обмену. Источник данных (определенный маркером) передает пакет
данных (или уведомление об отсутствии данных, предназначенных для передачи).
После успешного приема пакета приемник данных посылает пакет подтверждения
(Handshake Packet).
Разработка
структурно-функциональной схемы
Следуя из технического задания, выданного преподавателем мы
составили следующую структурно-функциональную схему, представленную в
приложении.
Компоненты:
MK USB - Микроонтроллер с поддержкой протокола USB, который
обрабатывает данные и команды приходящие из USB шины, осуществляет взаимодействие
с компьютером по средством универсальной последовательной шины.
МК - Микроконтроллер предназначенный для обработки данных
полученных от МК USB. Определяет какое действие необходимо совершить над
памятью, и выполняет их.- память предназначена для хранения данных.-
используется для временного удержания данных при передаче.
При подключении схемы к USB шине МК USB получает от
компьютера свой новый адрес, идентификационный номер и ждет дальнейших указаний
от PC. Как только получает команду для чтения то начинает принимать данные из
порта. Затем отправляет из на МК. МК обрабатывает код операции над памятью,
если это чтение, то считывает из памяти по определенному адресу данные и
отправляет их в МК USB. Если это запись то осуществляет стиранее данных по
определенному адресу и записывает туда новые данные. МК USB при получении
данных отправляет подтверждение об успешно выполненной операции.
Составление
принципиальной схемы
Принципиальная схема устройства представлена в приложении.
Она составлялась исходя из технического задания и технических возможностей
микроконтроллера.
В качестве USB контроллера был выбран микроконтроллер
PIC16C765, выбор был основан на поддержке этим контроллеров универсальной
последовательной шины.
В качестве контроллера памяти был выбран контроллер ADuC812.
А в качестве носителя данных была выбрана микросхема памяти
AT29C256. Краткие технические характеристики микросхемы памяти:
· Время доступа к данным - 70 нс
· Страничная организация памяти
· Размер страниц - 64б
· Размер памяти 256К
· Разрядность адреса - 15бит
Разработка программного обеспечения
Алгоритм работы программы для контроллера ADuC812, и
PIC16C765 указанны в приложении.
Переменные использованные в программе для контроллера
ADuC812:
Usb_command - переменная в которой содержится код
команды операции над памятью. (00000001b чтение, 00000010b запись)
Addr_l - младшая часть адреса.
Add_h - старшая часть адреса.
Page (64) - буфер для данных полученных от контроллера
usb шины и от памяти.
I, j - переменные участвующие при формировании
циклов.
Port0 - переменная в которой содержится информация о
состоянии нулевого порта.
Port2 - переменная в которой содержится информация о
состоянии второго порта.
Port3 - переменная в которой содержится информация о
состоянии третьего порта.
Timer_time - переменная используемая при осуществлении
задержки.
Timer_statr - переменная для запуска таймера. (1 запуск)
Timer_on - флаг состояния таймера. (1 - вкл, 0 - выкл)
Time - переменная в которую заноситься время задержки
в мс.
Temp - временная переменная.
T1 - переменная используемая для работы с таймером
Command - переменная используемая для отправления подтверждения
о выполненной операции.
Error - используется для определения правильности записи.
Переменные программы для контроллера PIC16C765 - Настройка порта на
прием
UEP1 - Настройка порта на передачу
data (67) - Буфер данных для приема и передачи по USB
каналу
size_pr - Размер принятых данных
size_p - Размер передаваемых данных.
Ustat - Регистр статуса модуля USB.
Sspcon, sspstat - Регистры используемый для передачи и
приема данных к ADuC812
portB - Переменная содержащая состояния порта B.
Command - Переменная которая содержит для подтверждения
действия.
i,j - Переменные используемые в циклах
temp - Временная переменная.
Программы работают следующим образом:
Программа для
Usb контроллера
При запуске программы происходит инициализация USB порта,
после инициализации программа переходит в режим ожидания, пока к ней не
обратиться главное устройство в USB порту. Как только это произошло, начинаем
считывать данные. Все данные из USB порта попадают в data (67). Далее
определяется код операции над памятью (прочитать данные или записать их туда).
А далее передаются все данные и коды операций передаются по последовательному
порту к контроллеру. И переходит в режим ожидания пока контроллер не выдаст
подтверждение о выполнении операции. Как только пришло подтверждение контроллер
USB в зависимости от операции отправляет либо подтверждение о записи либо
отправляет считанные данные. А далее начинает программу заново с места ожидания
запроса главного устройства.
Программа контроллера памяти.
При запуске программа переходит в режим ожидания запроса от
контроллера USB прта, как только пришел запрос определяется код операции над
памятью и считываются адреса. Если операция чтения подается запрос на память
для чтения данныс с переданного адреса. Все данные с памяти записываются в переменную
page (64) и вместе с подтверждением о выполненной операцией отправляются
данные контроллеру USB порта. Если же операция записи, то сначала принимаются
данные для записи с контроллера Usb порта, затем по принятому адресу происходит
стирание данных, далее идет их запись и проверка на запись, то есть считывание
записанных данных и сравнение их с исходными. После этих операций отправляется
подтверждение о записи данных. После чего программа начинает свою работу
заново.
Листинг программы
Программа для
контроллера ADuC812
my_kurs: do
$include (reg51. dcl)data_usb (4) byte,_command byte,_l
byte,_h byte,(64) byte,,j byte;_time byte,_start byte,_on
byte,byte,byte,byte,byte,byte;
// // // // // // // // // // // // // // // // // // // //
/<timer>_int: procedure interrupt 1;(timer_start = 1) then;_start = 0;_on
= 1;;(timer_on = 1) then;_time = timer_time - 1;(timer_time = 0) then;_on =
0;;;timer_int;
// // // // // // // // // // // // // // // // // // // //
</timer>
// // // // // // // // // // // // // // // // // // // //
<delay>_time: procedure (time);time byte;i = 0 to time;t1 = 0 to 4;_time
= 250;_start = 1;while timer_on = 0 or timer_start = 1;;;;delay_time;
// // // // // // // // // // // // // // // // // // // //
</delay>
// // // // // // // // // // // // // // // // // // // //
<usb>_command_usb: procedure;_command = 0;while (p3.2 = 0);
// // // // // // // // /while (p3.0 = 1);(p3.2 = 1) then
usb_command = 10;while (p3.0 = 1);(p3.1 = 1) then usb_command = usb+command +
1;
// // // // // // // // /(usb_command=1) then;_flag = 1;_flag
= 0;;(usb_command=2) then;_flag = 1;_flag = 0;;
// // // // // // // // // /while (p3.2 = 0);
// // // // // // // // // /i = 0 to 8;while (p3.0 = 1);(p3.1
= 1) then addr_l = addr_l+1;_l = shl (addr_l,0);while (p3.0 = 1);(p3.1=1) then
addr_l = addr_l + 1;(i < 7) then addr_l = shl (addr_l,0);;i = 0 to 8;while
(p3.0=1);(p3.1 = 1) then addr_h = addr_h+1;_h = shl (addr_l,0);while (p3.0 =
1);(p3.1 = 1) then addr_h = addr_h + 1;(i < 7) then addr_l = shl (addr_h,0);;read_usb;
// // // // // // // // // // // // // // // // // // //
</usb>
// // // // // // // // // // // // // // // // // // //
<read_flash>_flash: procedurei = 0 to 64;(j) = port0;_time
(100);;read_flash;
// // // // // // // // // // // // // // // // // //
/</read_flash>
// // // // // // // // // // // // // // // // // // //
<write_flash>_flash: procedure= 0;= 00001000b;= addr_l;= addr_h_time
(100);= 11000000b;_time (90);= 00000000b_time (100);i = 0 to 64;= 11000000b;=
page (j);_time (90);= 00000000b;_time (100);= 00001000b;= addr_l;= addr_h_time
(100);= 01000000b;i = 0 to 64;(page (j) = port0) then error = 1;_time
(100);;write_flash;
// // // // // // // // // // // // // // // // // //
/</write_flash>
// // // // // // // // // // // // // // // // // //
/<read_data_usb>_data_usb: procedurewhile (port3 and 00100000b) = 0;
// // // // // // // // // /j = 0 to 64;i = 0 to 8;while
(port3 and 00000001b) > 0;(port3 and 00000010b) then page (j) = page (j)
+1;(j) = shl (page (j),0);while (port3 and 00000001b) > 0;(port3 and
00000010b) then page (j) = page (j) + 1;(i < 7) then page (j) = shl (page
(j),0);;;read_data_usb;
// // // // // // // // // // // // // // // // // //
/</read_data_usb>
// // // // // // // // // // // // // // // // // //
/<write_data_usb>_data_usb: procedure= 00100000b;(command = 0) then;=
01100000b;(100);= 00100000b(100);j = 0 to 64;i = 0 to 8;= 01100000b;(100);(1
and (sh (data (j),1)) = 1) then port3 = 10100000b(100);;;;= 01100000b;(100);=
10100000b(100);;= 0;write_data_usb;
// // // // // // // // // // // // // // // // // //
/</write_data_usb>=1; /*разрешение работы для таймера 0*/=1; /*разрешаем
индивидуальные маски прерываний 7бит*/=1; /*разрешение обработки прерывания от
0 таймера 1бит*/while 1;_command_usb ();(read_flag = 1) then;= addr_l;=
addr+h;= 01001000b;_flash ();= 0;= 0;_data_usb ();;(write_flag = 1)
then;_data_usb ();= addr_l;= addr+h;= 01000000b;_time (100);_flash ();= 0;= 1;
// испльзуется для подтвердения записи_data_usb ();;;my_kurs;
Программа для контроллера PIC16C765
#include "mchusb. H"charbyte AT (198h),byte AT
(199h),(67) byte AT (1B6h),_pr byte AT (1A1h),_p byte AT (1A5h),byte AT
(1A5h),byte AT (14h),byte AT (94h),byte AT (06h),char command, i, j, temp;main
()
{();(ConfiguratedUSB = 0);
{;
}= 00000101b;= 00000011b;(1)
{();= 000000001b;(size_pr < 64)
{(j=0; j<1; j++) {(i=0; i<7; i++) {= sspcon &
00010000b;(1 and (shr (data [0],1)) = 1) sspstat = sspstat & 10000000b{=
not sspstat;= temp & 10000000b;= not temp
}= not sspcon;= temp & 10000000b;= not temptime (10);
}
}
}{(j=0; j<66; j++) {(i=0; i<7; i++) {= sspcon &
00010000b;(1 & (shr (data [0],1)) = 1) sspstat = sspstat & 10000000b{=
not sspstat;= temp & 10000000b;= not temp
}= not sspcon;= temp & 10000000b;= not temptime (10);
}
}
}= 0;(portB = 0) {}= 0;( (sspcon & 00010000b) > 0)
{}(sspstat & 10000000b)= 1;(command = 0)
}
}
}
{(j=0; j<64; j++)[j] = 0;
}[0] = 1;();
}
Заключение
По завершению выполнения курсового проекта, я, в достаточной
мере, изучил микроконтроллер ADuC812 (прозводитель Analog device), микро
контроллер PIC16C765 (производитель Microchip Technology incorpoated) и
взаимодействие этих контроллеров с универсальной последовательной шиной (USB).
В данном курсовом проекте использовались не все свойства этих
микроконтроллеров, а только основные.
Данный курсовой проект может быть использован в качестве справочного
материала по проектированию периферийных устройств для персонального компьютера
с использованием USB шины.
Приложение