Сообщение от
roma
нужен новый bois.bin на сд карте?
А высвечивается надпись "загрузка системы?". Если да, то действительно интерфейс работает. Далее под системой автор подразумевает именно файл bios.bin. Если его нет в корневом каталоге, то выводится ошибка.
bios.bin - это общая загружаемая прошивка объёмом до 12 кБайт и может содержать любую копию ПЗУ любого клона Специалиста. Я в свою прошивку воткнул Монитор-4 объёмом 4 кБайт и свой браузер rks файлов, написанный специально для Специалиста МХ2. Свой bios.bin я выложу позже.
Сообщение от
roma
У меня с твоей последней прошивкой не работает.
И не будет, там я инветировал один из сигналов и биты управляющего регистра не соответствуют. Вот попробуй эту, я всё испытаю у себя через пару дней.
Вот источник прошивки:
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