Главная » » SST89C58 электронных схем и кода пластины
01:51
SST89C58 электронных схем и кода пластины
Твитнуть
Референс-дизайн для чип SST ATA-дисков в 8051 микроконтроллер
Указания по применению Аннотация: Данное приложение к сведению вводит оборудования и прошивки референс-дизайна для SST ATA-Disk Chip SST58SD/LDxxx в SST FlashFlex51 SST89C54/58 (8051 совместимый микроконтроллер).
1.Hardware соединения:
Пожалуйста, ссылки на прилагается схема для подключения оборудования.
SST ATA-Disk Chip (ADC) SST58SD/LDxxx поддерживает только один режим работы, т.е. ATA / IDE режиме, все управляющие сигналы связаны на основе Таблицы 2-8, стр. 14 на данные После выполнили множество функций команда, включающая 8.. - немного передачи данных, все выше 8 бит шины данных (D8-D15) являются не волнует, и не может быть связь. RESET # (PIN1) не является обязательным, он может быть привязан к Vcc, если не используется. После включения питания, АЦП будет автоматически сбросить внутренне, он не нуждается во внешних вход сброса. Но это хорошая практика, чтобы связаться RESET # к одному из портов ввода / вывода, таких как P1.4, в случае АЦП из-под контроля для любой неизвестным причинам, принимающей MCU имеет возможность сброса АЦП. DASP # подключен к светодиодные через резистор к Vcc, LED обеспечивает пользователю видимость внутренней операции АЦП. Когда ADC активно занят на операции, СИД будет дальше. Просьба отметить, что мастер / раб выбор на выводе CSEL не вступят в силу до следующего сброса, другими словами, если вы измените перемычки мастер / ведомый выбор, вы должны сбросить АЦП один раз.
Ifyour применение системы расширяет любой другой ввода / вывода или памяти данных, измените эталонного дизайна. (1) изменение CS3FX # к Vcc, (2) соедините выход адрес декодер CS1FX # Когда оба CS1FX # и # CS3FX высоки , АЦП-де-отобраны и быть режиме ожидания, все шины данных в высоком-Z. При CS1FX # низка, АЦП выбран и быть оперативным. Так CS1FX # действует как Chip Select (/ CS) в наиболее распространенных периферийных устройств.
2.Firmware Руководство по проектированию:
Важно знать, что ATA / IDE стандарт не разрешают доступ только один байт в то время, чтобы ее носителей, таких как жесткий диск или АЦП, программа должна читать или писать данные по секторам, 1 сектор 512 байт данных, системный инженер дизайн должны разработать буфер данных для поддержки произвольного доступа к АЦП. эталонного дизайна используется вторичный блок (4Kbytes х 8bit) на кристалле вспышки в SST89C54/58 в качестве буфера данных.
После включения питания или внешнего сброса, АЦП по умолчанию для 16-битных операции. Как SST89C54/58 является 8-разрядный микроконтроллер, программа должна позволить 8-битные операции Установить Особенности командной, пожалуйста, ссылку на страницу 32 на данные.
Если АЦП установлен как Slave, кроме Мастер, вам необходимо изменить Бит 4 в Драйв / Глава Регистрация равным 1 при написании Команда ADC, см. стр. 17 на данные.
После включения питания или сброса, ADC будет готова для чтения / записи операции после 200 мс (типовое), 500 мс (максимум), см. стр. 1 под время запуска в особенности на данные.
3.Conclusion:
Легко изменить это референс-дизайна на любой другой встроенные контроллеры тех пор, пока вы будете следовать выше рекомендации по проектированию.
acallEnable8bit, в первую очередь, позволит 8 бит операции!
;========================================
orlSFCF, # 40h; IAPEN = 1
movSFAH, # высокой (FlashAddrs)
movSFAL, # низкой (FlashAddrs)
MOVB, № 8; стереть 8 секторов (512 байт)
;========================================
Стереть: movSFCM, # 0Bh; сектора стереть!
acallDone?
мова, SFAL
Адда, # 64; 64 байт / сектор в блоке 1 из SST89C54/58
movSFAL,
мова, SFAH
addca, # 0
movSFAH,
djnzB, стереть
anlSFCF, # 0BFh; отключить ИПФ
;========================================
Главная: ACALL Write_Sctr
ACALL Read_Sctr
ACALL Сравнить
jbF0, неудача
clrP1.4; указывает успешных операций.
setbP1.5
командой SJMP $
провал: clrP1.5; флаги не удалось comaprison.
setbP1.4
командой SJMP $
;========================================
Функция: acallBusy
movdptr, # Sectr_Cnt
мова, R2, R2 является число секторов
MOVX @ дптр,
movdptr, # Sectr_No
мова, R3, R3 содержит LBA0: 7
MOVX @ дптр,
movdptr, # Cylinder_Low
мова, R4, R4 содержит LBA8: 15
MOVX @ дптр,
movdptr, # Cylinder_Hi
мова, R5, R5 содержит LBA16: 23
MOVX @ дптр,
movdptr, # Drv_Head
мова, R6, R6 содержит LBA24: 27
anla, # 00001111b
Орла, # 11100000b; Бит 4 = 0 как мастер-p.htm "целевых =" _blank "название =" MASTER источников данных и PDF "> MASTER, 1, как раб; Бит 6 = 1, включить LBA.
MOVX @ дптр,
movdptr, # команда
мова, R7, R7 является кодом команды.
MOVX @ дптр,
RET
;========================================
Занят: movdptr, # статус
MOVX, @ дптр
jbacc.7, Занят
jbacc.0, ошибки
; Jnbacc.6, Занят
КМРВ; АКК = 0 в случае успешного
clrC; C = 0, АЦП не беспокоить (= 0) и не ошибка (ERR = 0)
RET; и готова к приему команд (RDY = 1)
ошибки: movdptr, # Error_Reg
MOVX, @ дптр
множества В С, С = 1 флаги коды ошибок, содержащихся в АКК зарегистрироваться
RET
;========================================
WaitDRQ: movdptr, # статус
MOVX, @ дптр
jbacc.7, WaitDRQ; Если занят = 1, то WaitDRQ
jnbacc.3, WaitDRQ, если DRQ = 0, то WaitDRQ
jbacc.0, ошибки, если ERR = 1, то ошибки чтения кода и установлен флаг C
; Jnbacc.6, WaitDRQ
КМРВ
clrC; C = 0, АЦП занят = 0, DRQ = 1, ERR = 0.
RET
;========================================
Готово: Мова, SFST
jbacc.2, делать?
RET
;========================================
Enable8bit: ACALL Занят
movdptr, # Особенности
мова, # 01h; позволит 8 бит передачи данных
MOVX @ дптр,
movdptr, # Drv_Head
мова, # 11100000b; Бит 4 = 0 как мастер-p.htm "целевых =" _blank "название =" MASTER источников данных и PDF "> MASTER, 1, как раб; Бит 6 = 1, включить LBA
MOVX @ дптр,
movdptr, # команда
мова, # SetFeature; # 0EFh
MOVX @ дптр,
RET
;========================================
Write_Sctr: movR2, # 1, написать 1 сектор на время.
movR3, # 0Ah; пусть LBA быть 000000Ah
movR4, # 0
movR5, # 0
movR6, # 0
movR7, # WriteSctr
acallFunction
acallWaitDRQ
acallWrite512
RET
;========================================
Write512: movR0, # высокой (сообщение); получить высшее адрес сообщения
movR1, # низкой (сообщение); получить ниже адрес сообщения
movR7, № 2; 512 байт = 2 * 256
MOVB, # 0
пишут: movdph, R0; получить адрес
movdpl, R1
КМРВ
movca, @ дптр; получить данные в сообщении
incdptr; указывать на следующий байт в сообщении
movR0, DPH, сохранять адреса
movR1, DPL
movDPTR, # Data_Reg; пункт АЦП
MOVX @ дптр,; писать 1 байт данных в АЦП
djnzB, писать
djnzR7, писать, писать все 512 байт до АЦП
RET
;========================================
Read_Sctr: movR2, № 1; читать 1 сектор на время.
movR3, # 0Ah; пусть LBA быть 000000Ah
movR4, # 0
movR5, # 0
movR6, # 0
movR7, # ReadSctr
acallFunction
acallWaitDRQ
acallRead512
RET
;========================================
; Прочитано 1 сектор размером 512 байт данных и записи в Flash на чип SST FlashFlex51 MCU
Read512: movR7, № 2; 512 байт = 2 * 256
MOVB, # 0
movdptr, # Data_Reg
movSFAH, # высокой (FlashAddrs)
movSFAL, # низкой (FlashAddrs)
orlSFCF, # 40h; множество IAPEN = 1 для включения ИПФ
следующим образом: movxa, @ дптр; читать 1 байт данных от АЦП
movSFDT,; программы в на-чипе Flash
movSFCM, # 0Eh; команду вопрос Байт-программы
acallDone;? ждать пока не сделано
мова, SFAL; настроить адрес Flash
Адда, № 1
movSFAL,
мова, SFAH
addca, # 0
movSFAH,
djnzB, читать
djnzR7, читать
anlSFCF, # 0BFh; отключить ИПФ
RET
;========================================
Сравните: movdptr, # сообщения; указывают на сообщение
movSFAH, # высокой (FlashAddrs)
movSFAL, # низкой (FlashAddrs)
orlSFCF, # 40h; IAPEN = 1
clrF0
movR7, # 2
MOVB, # 0
проверить: КМРВ
movca, @ дптр; getoriginal данных в сообщении
incdptr
movSFCM, # 0Ch; вопрос BYTE-VERIFY команды
NOP
xrla, SFDT; SFDT содержит datain вспышки, эти данные поступают от АЦП
jzskip
setbF0; множество F0 флаг (PSW.5), если любое несоответствие.