ISA-8 SD-контроллер (SPI) на CPLD
Moderator: Shaos
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: ISA-8 SD-контроллер (SPI) на CPLD
Любая sd-карта инитится на 7мгц(клок спи), клок схемы 14мгц
В z-контроллере никогда не было пониженной частоты.
В z-контроллере никогда не было пониженной частоты.
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: ISA-8 SD-контроллер (SPI) на дискретных элементах
При делении на два, возможно, надо будет поправить верилог.Tronix wrote:Спасибо всем за подсказки, взял этот код, как основной: http://zx-pk.ru/threads/27418-rabota-s- ... post901946 Действительно без проблем лезет в epm3032.
Частоту хочу взять с OSC 14,31818 МГц. Убрал из кода управление зеленым светодиодом, чтобы добавить еще один бит в делитель, сократив Ctrl[3:0] до Ctrl[2:0]. Итого 14,31818 МГц должен делится на 32 для low speed и на 2 для high speed.
На zx-pk верилог рассчитан на Clk много больший(мгц) чем SCK. Так как всё засинхрино на подъёме Clk.
Времянки могут не сойтись.
Поэтому(возможно) нужно разделить исходник на две части, одна на поседже Clk, вторая на негедже Clk
П.С. ЕПМ3064 и ЕПМ3128 тоже толерантны к 5в
-
- Devil
- Posts: 912
- Joined: 06 Oct 2006 03:17
- Location: г.Лянтор,Сургутского р-на,ХМАО
Re: ISA-8 SD-контроллер (SPI) на CPLD
Посмотрел спецификацию на SD интерфейс "SanDisk Secure Digital Card". Там частота инициализации и обычной работы с SD картой должны быть соответственно: 0,1...0,4 и до 25 МГц.
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Не работает 
Просто посылка десяти байт от 1 до 10:
Ради интереса пробовал писать в порт управления числа от 0 до 7 и тут же читать обратно из порта управления по кругу 65000 раз. Без ошибок. Что записал, то и считал.

Просто посылка десяти байт от 1 до 10:
Ради интереса пробовал писать в порт управления числа от 0 до 7 и тут же читать обратно из порта управления по кругу 65000 раз. Без ошибок. Что записал, то и считал.
You do not have the required permissions to view the files attached to this post.
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
-
- Maniac
- Posts: 261
- Joined: 22 Jun 2005 04:35
- Location: МО Россия
Re: ISA-8 SD-контроллер (SPI) на CPLD
Картинку не видно.Tronix wrote:Не работает
Просто посылка десяти байт от 1 до 10:
Ради интереса пробовал писать в порт управления числа от 0 до 7 и тут же читать обратно из порта управления по кругу 65000 раз. Без ошибок. Что записал, то и считал.
Что конкретно не работает?
-
- Admin
- Posts: 24012
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: ISA-8 SD-контроллер (SPI) на CPLD
Вложения пока не доехали - едут...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Воспользовался советом Lavr, прикрепил картинку к форуму... Мда. У меня картинка тоже дома осталась, подождем пока "доедут" вложения.DimkaM wrote: Что конкретно не работает?
Там с лог анализатора картинка SPI - передача 10 байт, от 0x01 до 0x0A. Так вот, передалось успешно байта 4, у всех остальных вместо данных - 0xFF. То есть там примерно так: 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x05 и тд. При этом на каждый байт клок генерится...
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: ISA-8 SD-контроллер (SPI) на CPLD
может скорость тактирования или слишком высокая или наоборот слишком низкая? в плисах там же синхронные сигналы бегают, и импулься 'слипаются'?
-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
К сожалению, пока проблема слишком общая, плюс код на Verilog'е, который я читаю медленно и со словарем
, поэтому на данном этапе особо помочь не могу...

-
- Doomed
- Posts: 662
- Joined: 18 Nov 2013 02:38
- Location: Москва
Re: ISA-8 SD-контроллер (SPI) на CPLD
Конкретно сейчас такой код:
Code: Select all
module MX2_CPLD(
// Системные
input Clk, // Входная частота 14.31818 МГц
input Res, // Входной сигнал сброса, активный уровень лог.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, // Выход управления красным светодиодом
input nINS // Вход датчика вставления карты
);
// Внутренние регистры
reg [4:0]Pre; // Делитель частоты
reg [2: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 MOSI = Data[7]; // Выход MOSI SPI
assign Dat[7:0] = (~nCS & ~nRD) ?
(Adr) ? {~nINS,BUSY,3'h0,Ctrl[2:0]} : Data[7:0]
: 8'hZZ;
// Синхронная логика
always @(posedge Clk) begin
// Делитель частоты
Pre[4:0] <= Pre[4:0] + 5'h1;
// Запись в управление может происходить асинхронно
if (~nCS & ~nWR & Adr) Ctrl[2:0] <= Dat[2:0];
// Сигнал сброса имеет приоритет вне зависимости от выбранной скорости
if (Res)
begin
// Сброс действует на эти регистры
Ctrl[2:0] <= 3'h0;
Bits[2:0] <= 3'h0;
BUSY <= 1'b0;
SCK <= 1'b0;
end else begin
// Состояние SPI
if (BUSY)
begin
// Делитель частоты
if (((Pre[4] & 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
Last edited by Tronix on 06 Dec 2017 10:44, edited 1 time in total.
-
- Doomed
- Posts: 463
- Joined: 12 Feb 2016 13:39
Re: ISA-8 SD-контроллер (SPI) на CPLD
а не здесь ли собака порылась? - в конце этого кода стоит условие, если передача не завершена, то новое ничего не записывать, так вот ПО 'извне' накидало в SPI порт байты не контроллируя признак занятости, вот и получили пропуски...когда передача одного байта завершилась, новый байт принимается и передается, а если нет, то пропуск.
Можно ли между байтами при передаче паузы сделать 'хорошие'?
Можно ли между байтами при передаче паузы сделать 'хорошие'?
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
Естественно, можно с умным видом рассказать о метастабильности, так как внешние асинхронные сигналы приходят внутрь без синхронизаторов. Но, если честно, вряд ли это может проявляться часто...
1. Такое поведение стабильно, или каждый раз теряются разные байты ?
2. Изменится ли картина, если между посылками байтов вставить паузу, заведомо бОльшую, чем время на передачу байта ?
1. Такое поведение стабильно, или каждый раз теряются разные байты ?
2. Изменится ли картина, если между посылками байтов вставить паузу, заведомо бОльшую, чем время на передачу байта ?
-
- Devil
- Posts: 716
- Joined: 30 Nov 2013 11:08
- Location: WWW
Re: ISA-8 SD-контроллер (SPI) на CPLD
Как одинаково мыслимPVV wrote:Можно ли между байтами при передаче паузы сделать 'хорошие'?
