А что именно не работает?
Вид для печати
А что именно не работает?
Наверное нет вообще приёма/передачи битов. У меня при работе с EPM7064SLC44 (прошивка с схемного ввода) два светодиода загораются, далее всё загружается хорошо. В загружаемый файл bios.bin мною зашит монитор с браузером RKS файлов, который запускается после загрузки указанного файла по директиве GD000.
С прошивкой на верилоге у меня как и у roma загорается зелёный светодиод и высвечиваются две первые строки лоадера:
*BIOS loader v.5*
Инициализация...
и всё на этом. Ну можно ещё вытащить карту - печатается предложение вставить карту.
Текущая рабочая схема вот. Адрес работы интерфейса - f010/f011.
Я менял в твоём источнике:
не помогло.Цитата:
assign Dat[7:0] = (~nCS & nWR) ? (Adr) ? {~nINS,BUSY,2'h0,Ctrl[3:0]} : Data[7:0] : 8'hZZ;
на:
assign Dat[7:0] = (~nCS & nWR) ? (Adr) ? {nINS,BUSY,2'h0,Ctrl[3:0]} : Data[7:0] : 8'hZZ;
Да, все сигналы к карте неизменны после вызова директивы "U".
Несколько импульсов по линии CLC проскакивают только в момент вынимания карты ...
На соответствие битов в управляющем регистре сверяли?
Версия Loader'а какая выводится? Ну и пора бы сверить стандарты, может?
Твоя версия 5-я. Какие стандарты?
Загрузчик с приветствием "*BIOS loader v.5*" использует следующие ресурсы:
А на сайте fifan'а вот так:Код:SPIData: .equ 0F010h ; F010h - регистр данных SPI
SPICtrl: .equ 0F011h ; F011h - регистр управления и статуса
// SPICtrl
; System Loader
; D7 - 0=INS D6 - 1=BSY D5=0 D4=0 D3 - 0=GRN D2 - 0=RED D1 - 1=HS D0 - 1=CS
Давайте договоримся об каком-то едином формате бит этого регистра. Я предлагаю положительную логику сигналов.Цитата:
При чтении из регистра управления распределение битов таково:
D0 - признак работы карты ("0" - карта не активна и "1" - карта активна);
D1 - текущая скорость обращения с картой ("0" - 312,5 кГц и "1" - 2,5 МГц);
D6 - признак вставленной карты ("0" - вставлена и "1" - гнездо пусто);
D7 - бит равен "0" - происходит процесс сдвига.
При записи в регистр управления распределение битов таково:
D0 - это выбор карты ("0" - карта не выбрана и "1" - карта выбрана);
D1 - бит выбора скорости тактов SPI ("0" - 312,5 кГц и "1" - 2,5 МГц);
D2 - RED - сигнал обращения к карте ("0" - активация светодиода) - Operate;
D3 - GREEN - сигнал вставленной карты ("0" - активация светодиода) - Insert.
В модели как раз вот такие данные:Код:RD WR RES
D7 INS x x
D6 BSY x x
D5 0 x x
D4 0 x x
D3 GRN GRN 0
D2 RED RED 0
D1 SPD SPD 0
D0 SEL SEL 0
INS: 0 - пусто, 1 - вставлена карта
BSY: 0 - готов, 1 - занят сдвигом
GRN: 0 - выключен, 1 - горит зеленый LED
RED: 0 - выключен, 1 - горит красный LED
SPD: 0 - низкая скорость, 1 - высокая скорость
SEL: 0 - карта не выбрана, 1 - карта выбрана
И это не соответствует лодырю версии ".5". Пересобранный лодырь во вложении.Код:// Комбинаторика
assign nSEL = ~Ctrl[0]; // Выбор карты
assign nRED = ~Ctrl[2]; // Красная лампочка
assign nGREEN = ~Ctrl[3]; // Зеленая лампочка
assign MOSI = Data[7]; // Выход MOSI SPI
assign Dat[7:0] = (~nCS & ~nRD) ?
(Adr) ? {~nINS,BUSY,2'h0,Ctrl[3:0]} : Data[7:0]
: 8'hZZ;
Начну переделывать: информацию на сайте и схемный ввод проекта ПЛИС на EPM7064SLC44.
- - - Добавлено - - -
HardWareMan, вопрос по сигналу SD_CS. Непосредственно выбор SPI на контактах SD карты активный уровень ноль или единица? В остальном схемный ввод соответствует.
Потом по схеме карта вставлена - входной пин замыкается на землю, у тебя наоборот - нам схему переделывать?
Для активации карты и светодиодов нужно лог.0, замыкающий контакт в гнезде датчика вставления - тоже лог.0. Но для программы эти сигналы инвертированы. Для этого на выходах светодиодов и выбора карты стоят инверторы. И на входе сигнала INS.
С INS я понял, я про выборку SD карты, сигнал /CSSD на схеме, он активный какой?
Если можно, лучше скорректировать программную часть, чем аппаратную . По возможности без дополнительных инверторов ...
Инверторы будут в плисине, не переживай.
Так итак места в EPM7032SLC44 еле хватает, или эти инверторы будут только в EPM7064SLC44 ?
Вот проект с ЕРМ7032:
http://jpegshare.net/images/86/a4/86...d745a62a39.png
Он соответствует информации из этого поста, которую я предлагаю к унификации. Все необходимые инверторы и прочее уже присутствуют в проекте для ЕРМ7032.
Чуть позже выложу прошивку для МХ2, начинаю браузер переделывать.
- - - Добавлено - - -
Прошивку сделал, но она не работает (loader) в эмуляторе b2m. Можно попробывать прошить ПЗУ на свой страх и риск. bios.bin выложу позже.
В эмуле b2m тоже следует привести секцию SD интерфейса в порядок.
Красное убрать, зелёное добавить:
Скрытый текст
Код:bios : Memory {
rom="Specialist\specsvga.bin"
rom="Specialist\spets_mx2all.bin"
}
...
mmport : MemMap2 {
map[00-03]=sys.data
map[04-07]=app.data
map[08-0B]=dsk.data
map[0C-0F]=tim.data
map[10]=sdcard.data8
map[11]=81
map[12]=dsk.side
map[13]=dsk.drive
map[14]=sdcard.data8
map[15]=40
map[16]=sdcard.data8
map[17]=40
map[18-1B]=vidcolor
map[1C-1F]=mode
}
[свернуть]
Спасибо b2m! Всё заработало. Оболочка загружается.
А прошивку для EPM7032SLC44 нужно менять? У меня на реальном железе не работает.
И зелёный светодиод сейчас не загорается, когда установлена карта. Загорается только красный светодиод когда вызываешь "U" .
Но дальше не грузится ...
Fifan, у тебя на реальном железе с EPM7032SLC44 заработало? У меня с твоей последней прошивкой не работает. Или нужен новый bois.bin на сд карте?
А высвечивается надпись "загрузка системы?". Если да, то действительно интерфейс работает. Далее под системой автор подразумевает именно файл bios.bin. Если его нет в корневом каталоге, то выводится ошибка.
bios.bin - это общая загружаемая прошивка объёмом до 12 кБайт и может содержать любую копию ПЗУ любого клона Специалиста. Я в свою прошивку воткнул Монитор-4 объёмом 4 кБайт и свой браузер rks файлов, написанный специально для Специалиста МХ2. Свой bios.bin я выложу позже.
И не будет, там я инветировал один из сигналов и биты управляющего регистра не соответствуют. Вот попробуй эту, я всё испытаю у себя через пару дней.
Вот источник прошивки:
PHP код:// Контроллер SPI для Специалист-MX2 на EPM7032SLC44
module spets_mx2_sd_v(
// Системные
input Clk, // Входная частота 10МГц
input nRes, // Входной сигнал сброса, активный уровень лог.0
input nRD, // Вход строба чтения
input nWR, // Вход строба записи
input nCS, // Вход выбора контроллера
input Adr, // Вход адреса данные/управление
inout [7:0]Dat, // Шина данных
// SPI
output nSEL, // Выходной сигнал выбора карты
output reg SCK, // Выход тактовой частоты SPI
input MISO, // Вход данных SPI
output MOSI, // Выход данных SPI
output nRED, // Выход управления красным светодиодом
output nGREEN, // Выход управления зеленым светодиодом
input nINS, // Вход датчика вставления карты
// Резерв
input MX, // ?
input U6 // ?
);
// Внутренние регистры
reg [3:0]Pre; // Делитель частоты
reg [3:0]Ctrl; // Регистр управления
reg [7:0]Data; // Регистр данных
reg [2:0]Bits; // Счетчик сдвигаемых бит
reg RMISO; // Защелка сигнала MISO
reg BUSY; // SPI занят передачей
// Комбинаторика
assign nSEL = ~Ctrl[0]; // Выбор карты
assign nRED = ~Ctrl[2]; // Красный светодиод
assign nGREEN = ~Ctrl[3]; // Зеленый светодиод
assign MOSI = Data[7]; // Выход MOSI SPI
assign Dat[7:0] = (~nCS & ~nRD) ? (Adr) ? {~nINS,BUSY,2'h0,Ctrl[3:0]} : Data[7:0] : 8'hZZ;
// биты управляющего регистра:
// 7 - ~nINS Вход датчика вставления карты с инверсией
// 6 - BUSY SPI занят передачей
// 5 - 0
// 4 - 0
// 3 - nGREEN Зеленый светодиод
// 2 - nRED Красный светодиод
// 1 - 0
// 0 - nSEL Выбор карты с инверсией
// Синхронная логика
always @(posedge Clk) begin
// Делитель частоты
Pre[3:0] <= Pre[3:0] + 4'h1;
// Запись в управление может происходить асинхронно
if (~nCS & ~nWR & Adr) Ctrl[3:0] <= Dat[3:0];
// Сигнал сброса имеет приоритет вне зависимости от выбранной скорости
if (~nRes)
begin
// Сброс действует на эти регистры
Ctrl[3:0] <= 4'h0;
Bits[2:0] <= 3'h0;
BUSY <= 1'b0;
SCK <= 1'b0;
end else begin
// Состояние SPI
if (BUSY)
begin
// Делитель частоты
if (((Pre[3] & Pre[2] & Pre[1]) | Ctrl[1]) & Pre[0])
begin
// SPI работает
if (SCK)
begin
// Сбрасываем такт
SCK <= 1'b0;
// Спад, поэтому сдвигаем
Data[7:0] <= {Data[6:0],RMISO};
// Считаем биты
Bits[2:0] <= Bits[2:0] + 3'h1;
// Это был 7й бит?
if (Bits[2] & Bits[1] & Bits[0]) BUSY <= 1'b0;
end else begin
// Устанавливаем такт
SCK <= 1'b1;
// Это фронт, поэтому сэмплируем вход
RMISO <= MISO;
end
end
end else begin
// Обнуляем счетчик бит
Bits[2:0] <= 3'h0;
// Запись в регистр данных возможна только если SPI не занят
if (~nCS & ~nWR & ~Adr)
begin
Data[7:0] <= Dat[7:0];
BUSY <= 1'b1;
end
end
end
end
// Конец
endmodule
Загрузка заработала с EPM7032SLC44 , пишет загружаю систему, найден MBR, надена цепочка FAT12/FAT16, загружаю BOIS.BIN, загружаю FAT16 цепочку, загружаю оболочку, загрузка оболочки завершена, но затем выскакивает в BIOS и пишет PROGRAM?
Иногда пишет ошибка при загрузке оболочки. Видимо работает не очень стабильно ...
Свтодиоды оба не работают.
А что значит "но"? Это и есть правильная работа загрузки системы. Она, система загрузилась и высветилось приглашение.
- - - Добавлено - - -
Как они подключены? должны анодами через резисторы к плисине (автор переделал). Я не знаю как в программе должны зажигаться светодиоды, может автор лоадера скажет?
Стоп. Светодиоды анодами к + через сопротивления, а катодами к CPLD. В последнем проекте именно под это соединение. И в программе тоже.
- - - Добавлено - - -
Ну или по твоей схеме:
http://www.spetsialist-mx.ru/schemes...ist_MX2_SD.png
Читаем твои допущения:
GRN: 0 - выключен, 1 - горит зеленый LED
RED: 0 - выключен, 1 - горит красный LED
Я тоже в версии для EPM7064SLC44 поставил инверторы на светодиоды, а roma пишет, что светодиоды не светятся никак.
А пусть рома покажет фотографию, как он и чего там распаял.
Оба светодиода у меня подключены анодами к +5 В, катодами через резисторы подключены к ПЛИС.
У меня обычная плата МХ2 версии 2.2. Я просто убрал на плате R33-R36 и подключил внешний китайский кардреадер.
Со старой прошивкой от HardWareMan оба светодиода работали, с последней от Fifan http://zx-pk.ru/attachment.php?attac...0&d=1518510193 оба светодида ни разу не загораются ...
Fifan - не мог бы ты выложить свой bios.bin для МХ2 с автоматической загрузкой оболочки.
"Автоматической" интересное слово. Мы ж там набираем директиву U для запуска bios.bin, что тут автоматического? И я повторяюсь, что этим файлом может быть любая прошивка для Специалиста объёмом до 12 кБайт. Прилагаю свой файл bios.bin. Для его запуска после выполнения директивы U нужно ввести: F7 (в принципе можно нажать любую клавишу верхнего ряда, для выхода в командную строку), затем GD000 (запуск кодов с адреса D000). Вот так выглядит программа в эмуляторе, я добавил в имидж диска и bios.bin и свои любимые игры (файл SD6.img - образ SD карты).
Вложение 64259
А нельзя ли в bios.bin расположить пропатченный монитор, который автоматом загружает оболочку ? Чтобы не запоминать и не жать никакие кнопки ...
Пропатченный монитор только от HardWareMan - Монитор 4, ну такой же как при старте Специалиста МХ2. В текущей прошивке для Специалиста МХ2 нет места для моего браузера.
Как я понял, загружеаемый bios.bin это образ из Монитор 4 + твой коммандер? После его загрузки с СД-карты управление передаётся монитору?
А нельзя ли передать управление на D000, чтобы автоматически запустить коммандер без всяких F7 и GD000 ?
Можно. Нужно заменить в прошивке байт по адресу 7233h с с0h на d0h. Проверил на эмуляторе - работает.
Пропатчил в прошивке RОМ байт по адресу 7233h с с0h на d0h. Всё равно после загрузки пишет PROGRAM? .
По F7 и GD000 стартует коммандер и отображет содержимое СД-карты.
Свтодиоды так и не горят...
Проверил прошивки: и плисины (EPM7032SLC44) и ПЗУ (W27C512) под новый лоадер (v.6) работают. Светодиоды действительно не горят, хотя до этого с v.5 чётко зажигались и гасли.
Пока на этом спеце работу на некоторое время отложу. Потом вернусь для очередного подхода к контроллеру дисковода - есть некоторые новые наработки в прошивке плисины.