Устройство записи и чтения данных из Flash-памяти
Проектирование микропроцессорного устройства для записи и чтения данных из памяти flash-типа и осуществления взаимодействия с персональным компьютером посредством универсальной последовательной шины (USB). Программное обеспечение для устройства.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 23.12.2012 |
Размер файла | 868,3 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Техническое задание
- Введение
- Общая структура универсальной последовательной шины
- Разработка структурно-функциональной схемы
- Составление принципиальной схемы
- Программа для 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 интерфейс,
· сторожевой таймер,
· монитор электропитания.
ADuC812 - полностью интегрированная 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. Определяет какое действие необходимо совершить над памятью, и выполняет их.
FLASH - память предназначена для хранения данных.
Register - используется для временного удержания данных при передаче.
При подключении схемы к 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
UEP0 - Настройка порта на прием
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)
declare data_usb (4) byte,
usb_command byte,
addr_l byte,
addr_h byte,
page (64) byte,
i,j byte;
timer_time byte,
timer_start byte,
timer_on byte,
time byte,
temp byte,
command byte,
t1 byte,
error byte;
// // // // // // // // // // // // // // // // // // // // /<timer>
timer_int: procedure interrupt 1;
if (timer_start = 1) then
do;
timer_start = 0;
timer_on = 1;
end;
if (timer_on = 1) then
do;
timer_time = timer_time - 1;
if (timer_time = 0) then
do;
timer_on = 0;
end;
end;
end timer_int;
// // // // // // // // // // // // // // // // // // // // </timer>
// // // // // // // // // // // // // // // // // // // // <delay>
delay_time: procedure (time);
declare time byte;
do i = 0 to time;
do t1 = 0 to 4;
timer_time = 250;
timer_start = 1;
do while timer_on = 0 or timer_start = 1;
end;
end;
end;
end delay_time;
// // // // // // // // // // // // // // // // // // // // </delay>
// // // // // // // // // // // // // // // // // // // // <usb>
read_command_usb: procedure;
usb_command = 0;
do while (p3.2 = 0)
end;
// // // // // // // // /
do while (p3.0 = 1)
end;
if (p3.2 = 1) then usb_command = 10;
do while (p3.0 = 1)
end;
if (p3.1 = 1) then usb_command = usb+command + 1;
// // // // // // // // /
if (usb_command=1) then
do;
read_flag = 1;
write_flag = 0;
end;
if (usb_command=2) then
do;
write_flag = 1;
read_flag = 0;
end;
// // // // // // // // // /
do while (p3.2 = 0)
end;
// // // // // // // // // /
do i = 0 to 8;
do while (p3.0 = 1)
end;
if (p3.1 = 1) then addr_l = addr_l+1;
addr_l = shl (addr_l,0);
do while (p3.0 = 1)
end;
if (p3.1=1) then addr_l = addr_l + 1;
if (i < 7) then addr_l = shl (addr_l,0);
end;
do i = 0 to 8;
do while (p3.0=1)
end;
if (p3.1 = 1) then addr_h = addr_h+1;
addr_h = shl (addr_l,0);
do while (p3.0 = 1)
end;
if (p3.1 = 1) then addr_h = addr_h + 1;
if (i < 7) then addr_l = shl (addr_h,0);
end;
end read_usb;
// // // // // // // // // // // // // // // // // // // </usb>
// // // // // // // // // // // // // // // // // // // <read_flash>
read_flash: procedure
do i = 0 to 64;
page (j) = port0;
delay_time (100);
end;
end read_flash;
// // // // // // // // // // // // // // // // // // /</read_flash>
// // // // // // // // // // // // // // // // // // // <write_flash>
write_flash: procedure
error = 0;
potr3 = 00001000b;
port0 = addr_l;
port2 = addr_h
delay_time (100);
port3 = 11000000b;
delay_time (90);
port3 = 00000000b
delay_time (100);
do i = 0 to 64;
port3 = 11000000b;
port0 = page (j);
delay_time (90);
port3 = 00000000b;
delay_time (100)
end;
potr3 = 00001000b;
port0 = addr_l;
port2 = addr_h
delay_time (100);
port3 = 01000000b;
do i = 0 to 64;
if (page (j) = port0) then error = 1;
delay_time (100);
end;
end write_flash;
// // // // // // // // // // // // // // // // // // /</write_flash>
// // // // // // // // // // // // // // // // // // /<read_data_usb>
read_data_usb: procedure
do while (port3 and 00100000b) = 0
end;
// // // // // // // // // /
do j = 0 to 64;
do i = 0 to 8;
do while (port3 and 00000001b) > 0
end;
if (port3 and 00000010b) then page (j) = page (j) +1;
page (j) = shl (page (j),0);
do while (port3 and 00000001b) > 0
end;
if (port3 and 00000010b) then page (j) = page (j) + 1;
if (i < 7) then page (j) = shl (page (j),0);
end;
end;
end read_data_usb;
// // // // // // // // // // // // // // // // // // /</read_data_usb>
// // // // // // // // // // // // // // // // // // /<write_data_usb>
write_data_usb: procedure
port3 = 00100000b;
if (command = 0) then
do;
port3 = 01100000b;
delay (100);
port3 = 00100000b
delay (100);
do j = 0 to 64;
do i = 0 to 8;
port3 = 01100000b;
delay (100);
if (1 and (sh (data (j),1)) = 1) then port3 = 10100000b
delay (100);
end;
end;
end
else
do;
port3 = 01100000b;
delay (100);
port3 = 10100000b
delay (100);
end;
port3 = 0;
end write_data_usb;
// // // // // // // // // // // // // // // // // // /</write_data_usb>
tr0=1; /*разрешение работы для таймера 0*/
ea=1; /*разрешаем индивидуальные маски прерываний 7бит*/
et0=1; /*разрешение обработки прерывания от 0 таймера 1бит*/
do while 1;
read_command_usb ();
if (read_flag = 1) then
do;
port0 = addr_l;
port2 = addr+h;
port3 = 01001000b;
read_flash ();
port3 = 0;
command = 0;
write_data_usb ();
end;
if (write_flag = 1) then
do;
read_data_usb ();
port0 = addr_l;
port2 = addr+h;
port3 = 01000000b;
delay_time (100);
write_flash ();
port3 = 0;
command = 1; // испльзуется для подтвердения записи
write_data_usb ();
end;
end;
end my_kurs;
Программа для контроллера PIC16C765
#include "mchusb. H"
unsigned char
UEP0 byte AT (198h),
UEP1 byte AT (199h),
data (67) byte AT (1B6h),
size_pr byte AT (1A1h),
size_p byte AT (1A5h),
ustat byte AT (1A5h),
sspcon byte AT (14h),
sspstat byte AT (94h),
portB byte AT (06h),
unsigned char command, i, j, temp;
void main ()
{
initUSB ();
while (ConfiguratedUSB = 0);
{
initUSB;
}
UEP0 = 00000101b;
UEP1 = 00000011b;
while (1)
{
GetEP0 ();
portB = 000000001b;
if (size_pr < 64)
{
for (j=0; j<1; j++) {
for (i=0; i<7; i++) {
sspcon = sspcon & 00010000b;
if (1 and (shr (data [0],1)) = 1) sspstat = sspstat & 10000000b
else{
temp = not sspstat;
temp = temp & 10000000b;
sspstat = not temp
}
temp = not sspcon;
temp = temp & 10000000b;
sspcon = not temp
call time (10);
}
}
}
else{
for (j=0; j<66; j++) {
fo (i=0; i<7; i++) {
sspcon = sspcon & 00010000b;
if (1 & (shr (data [0],1)) = 1) sspstat = sspstat & 10000000b
else{
temp = not sspstat;
temp = temp & 10000000b;
sspstat = not temp
}
temp = not sspcon;
temp = temp & 10000000b;
sspcon = not temp
call time (10);
}
}
}
portB = 0;
while (portB = 0) {}
command = 0;
while ( (sspcon & 00010000b) > 0) {}
if (sspstat & 10000000b)
command = 1;
if (command = 0)
{
while ( (sspcon & 00010000b) > 0) {}
for (j=0; j<64; j++) {
for (i=0; i<8; i++) {
while ( (sspcon & 00010000b) > 0) {}
if ( (sspstat & 10000000b) > 0)
data [j] = data [j] +1;
data [j] = shl (data [j],1);
if (i < 7)
data [j] = shl (data [j],1);
}
}
}
else
{
for (j=0; j<64; j++)
data [j] = 0;
}
data [0] = 1;
PutUSB1 ();
}
Заключение
По завершению выполнения курсового проекта, я, в достаточной мере, изучил микроконтроллер ADuC812 (прозводитель Analog device), микро контроллер PIC16C765 (производитель Microchip Technology incorpoated) и взаимодействие этих контроллеров с универсальной последовательной шиной (USB). В данном курсовом проекте использовались не все свойства этих микроконтроллеров, а только основные.
Данный курсовой проект может быть использован в качестве справочного материала по проектированию периферийных устройств для персонального компьютера с использованием USB шины.
Приложение
Размещено на Allbest.ru
Подобные документы
Средства машинного хранения данных, используемые в персональных компьютерах. Особенности механизмов чтения-записи. Контроль достоверности хранимых в памяти данных. Уровни кэш-памяти. Политика записи при кешировании, сравнение производительности.
презентация [2,7 M], добавлен 10.08.2013Компьютерная память, ее виды и классификации. Составляющие внутренней памяти процессорной системы (постоянное и оперативное запоминающие устройства). Построение пространства памяти заданного объема. Принцип записи и чтения информации, структура памяти.
контрольная работа [609,8 K], добавлен 12.01.2015Приборы, предназначенные для записи, хранения и воспроизведения информации, их устройство и классификация. Достоинства и недостатки статической памяти, ее структурная схема. Режим чтения с одиночной скоростью. Статические оперативные устройства.
реферат [223,6 K], добавлен 08.01.2012Назначение и разновидности постоянных запоминающих устройств (ПЗУ). Конструкция и виды полупроводниковых ПЗУ. История разработки и типы Flash-памяти, ее программирование и структурная организация. Характеристика современных стандартов карт памяти.
презентация [933,6 K], добавлен 11.12.2013Анализ работы параллельных вычислений на видеокарте GeForce GT 540M с использованием текстурной памяти. Рассмотрение специфических особенностей по адресации текстурной памяти. Изучение основ чтения и записи данных. Описание примеров данных программ.
лабораторная работа [3,1 M], добавлен 04.12.2014Исследование методов и средств многопоточного взаимодействия, особенности использования блокирующей и неблокирующей синхронизации. Разработка, программная реализация и тестирование структуры данных и алгоритмов чтения, записи, освобождения памяти.
дипломная работа [2,2 M], добавлен 24.06.2012Сравнительный анализ статической и динамической памяти. Быстродействие и потребление энергии статической памятью. Объем памяти микросхем. Временные диаграммы чтения и записи памяти. Микросхемы синхронной и асинхронной памяти. Режимы модулей памяти.
презентация [114,2 K], добавлен 27.08.2013Твердотельный накопитель SSD, его виды: на основе микросхем памяти и флеш-памяти. Сравнение производительности HDD и SDD в рабочих условиях. Способы записи информации на винчестер. Технология структурированного носителя. Суперпарамагнитный предел.
курсовая работа [53,3 K], добавлен 15.05.2012Внутренние и внешние устройства персонального компьютера. Особенности смешанной и разделенной кэш-памяти. Технология перпендикулярной записи на жестком диске. Основные устройства лазерной записи и их функции. Назначение источника бесперебойного питания.
курсовая работа [410,0 K], добавлен 05.12.2012Используемые в компьютерах устройства памяти для хранения данных. Внутренние (оперативная и кэш-память) и внешние устройства памяти. Уровни иерархии во внутренней памяти. Подключения дисководов и управления их работой с помощью дискового контроллера.
презентация [47,7 K], добавлен 26.11.2009