Author |
Message |
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Любая sd-карта инитится на 7мгц(клок спи), клок схемы 14мгц В z-контроллере никогда не было пониженной частоты.
|
03 Dec 2017 12:54 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
При делении на два, возможно, надо будет поправить верилог. На zx-pk верилог рассчитан на Clk много больший(мгц) чем SCK. Так как всё засинхрино на подъёме Clk. Времянки могут не сойтись. Поэтому(возможно) нужно разделить исходник на две части, одна на поседже Clk, вторая на негедже Clk П.С. ЕПМ3064 и ЕПМ3128 тоже толерантны к 5в
|
03 Dec 2017 22:59 |
|
|
fifan
Devil
Joined: 06 Oct 2006 03:17 Posts: 859 Location: г.Лянтор,Сургутского р-на,ХМАО
|
Посмотрел спецификацию на SD интерфейс "SanDisk Secure Digital Card". Там частота инициализации и обычной работы с SD картой должны быть соответственно: 0,1...0,4 и до 25 МГц.
|
04 Dec 2017 03:19 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Не работает Просто посылка десяти байт от 1 до 10: Ради интереса пробовал писать в порт управления числа от 0 до 7 и тут же читать обратно из порта управления по кругу 65000 раз. Без ошибок. Что записал, то и считал.
|
04 Dec 2017 11:43 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
.
|
04 Dec 2017 11:46 |
|
|
DimkaM
Maniac
Joined: 22 Jun 2005 04:35 Posts: 260 Location: МО Россия
|
Картинку не видно. Что конкретно не работает?
|
04 Dec 2017 22:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22615 Location: Silicon Valley
|
Вложения пока не доехали - едут...
|
04 Dec 2017 22:58 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Воспользовался советом Lavr, прикрепил картинку к форуму... Мда. У меня картинка тоже дома осталась, подождем пока "доедут" вложения. Там с лог анализатора картинка SPI - передача 10 байт, от 0x01 до 0x0A. Так вот, передалось успешно байта 4, у всех остальных вместо данных - 0xFF. То есть там примерно так: 0xFF, 0xFF, 0x03, 0xFF, 0xFF, 0x05 и тд. При этом на каждый байт клок генерится...
|
04 Dec 2017 23:11 |
|
|
PVV
Doomed
Joined: 12 Feb 2016 13:39 Posts: 463
|
может скорость тактирования или слишком высокая или наоборот слишком низкая? в плисах там же синхронные сигналы бегают, и импулься 'слипаются'?
|
05 Dec 2017 01:30 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Скорость тактирования 14,431818 МГц
|
05 Dec 2017 02:16 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
К сожалению, пока проблема слишком общая, плюс код на Verilog'е, который я читаю медленно и со словарем , поэтому на данном этапе особо помочь не могу...
|
05 Dec 2017 02:32 |
|
|
Tronix
Doomed
Joined: 18 Nov 2013 02:38 Posts: 662 Location: Москва
|
Конкретно сейчас такой код: | | | | Code: 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.
|
05 Dec 2017 02:34 |
|
|
PVV
Doomed
Joined: 12 Feb 2016 13:39 Posts: 463
|
а не здесь ли собака порылась? - в конце этого кода стоит условие, если передача не завершена, то новое ничего не записывать, так вот ПО 'извне' накидало в SPI порт байты не контроллируя признак занятости, вот и получили пропуски...когда передача одного байта завершилась, новый байт принимается и передается, а если нет, то пропуск. Можно ли между байтами при передаче паузы сделать 'хорошие'?
|
05 Dec 2017 03:48 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Естественно, можно с умным видом рассказать о метастабильности, так как внешние асинхронные сигналы приходят внутрь без синхронизаторов. Но, если честно, вряд ли это может проявляться часто...
1. Такое поведение стабильно, или каждый раз теряются разные байты ? 2. Изменится ли картина, если между посылками байтов вставить паузу, заведомо бОльшую, чем время на передачу байта ?
|
05 Dec 2017 03:51 |
|
|
newold86
Devil
Joined: 30 Nov 2013 11:08 Posts: 707 Location: WWW
|
Как одинаково мыслим
|
05 Dec 2017 03:51 |
|
|