Просмотр полной версии : Контроллер дисковода для УКНЦ, работающий с образами на micro-SD карте.
Jarik65535
01.08.2017, 12:15
Можно, в принципе такой сигнал уже есть внутри, нужно только вывести его наружу.
Можно, в принципе такой сигнал уже есть внутри, нужно только вывести его наружу. Ну и замечательно. А инструкция по общению с этим контроллером со стороны ЦП готова? А то, ИМХО, пора писать драйвер.
Jarik65535
01.08.2017, 18:57
Пока нет, вот и спрашиваю здесь, что нужно реализовывать?
Пока так:
1. ожидаем готовности на каждом шаге.
2. в регистр данных заносим код операции
3. номер тома
4. номер блока в томе (мл.слово)
5. номер блока в томе (ст.слово, 0 для RT-11)
6. кол-во слов (16-бит хватит всем, а в случае с RT-11 - даже 15 бит)
7. здесь можно прочитать предварительный результат операции из регистра 2.
8. читаем/пишем данные
9. читаем результат операции из регистра 2.
Я пока ничего не делал, так что предложения принимаются.
А то, ИМХО, пора писать драйвер.
есть маленькое пожелание, по возможности, не ограничивать возможность работы с утройством
версией монитора. ну что бы от 5.0 и все все все )
1. ожидаем готовности на каждом шаге.
2. в регистр данных заносим код операции
3. номер тома
4. номер блока в томе (мл.слово)
5. номер блока в томе (ст.слово, 0 для RT-11)
6. кол-во слов (16-бит хватит всем, а в случае с RT-11 - даже 15 бит)
7. здесь можно прочитать предварительный результат операции из регистра 2.
8. читаем/пишем данные
9. читаем результат операции из регистра 2.
1. На каждом шаге проверяем бит завершения и если он установлен - контроллер завершил выполнение команды.
2. Если код операции ошибочный - контроллер установит биты ошибки и завершения.
3. Если к указанному номеру тома не подключен образ - контроллер установит биты ошибки и завершения.
4,5. Если номер блока больше размера образа - контроллер установит биты ошибки и завершения.
6. Если количество слов больше имеющегося в образе места от номера блока до конца образа - контроллер установит бит ошибки, но прочитает/запишет всё имеющееся место.
Коды команд контроллера:
000 - CHECK - Контроллер возвращает в старшем байте регистра данных номер тома последней операции, а в младшем - код состояния ( код ошибки последней операции ).
001 - READ
002 - WRITE
004 - SIZE - Номер Тома - Контроллер возвращает два слова размера подключенного образа ( мл.слово-ст.слово ). Если образ не подключен - контроллер сразу ставит биты ошибки и завершения.
Коды ошибок:
IS_SUC = 0001; // нет ошибки
IE_OFL = 0277; // устройство offline (образ не подключен)
IE_BLK = 0354; // выход за пределы устройства
IE_WLK = 0364; // попытка записи на защищённое устройство
IE_VER = 0374; // неустранимая ошибка (например внутренняя ошибка контроллера)
IE_IFC = 0376; // неверная команда
Кстати, забыли о том, что диски в наших системах имеют блочную структуру. Если отправить на запись кусок произвольной длины, то в последнем блоке, в "хвосте", может остаться мусор. Я на эти грабли уже наступал, но у меня, в качестве мусора, было последнее переданное по DMA слово, в итоге, сохраненный исходник при загрузке в EDK показывал в конце текста множество пустых строк, если последним словом было 005015 (<ВК><ПС>, длина занятой части файла четная) да, в придачу еще и как-то неадекватно себя вел, если последнее слово было 000012 (<ПС>0, длина нечетная). А здесь в RT-11 возможны вообще всяческие чудеса.
Далее, определяемся с регистрами. Как я понял, основной, всегда доступный регистр состояния - 176560, т в нем бит Д7 (0200) - готовность к обмену через 176562, так? Еще какие-то адреса есть? Вроде бы загрузчику из сети требовались еще 176564 и 66, они дальше используются? Какие еще биты есть или планируются в 176560?
Jarik65535
02.08.2017, 11:53
Кстати, забыли о том, что диски в наших системах имеют блочную структуру. Если отправить на запись кусок произвольной длины, то в последнем блоке, в "хвосте", может остаться мусор. Я на эти грабли уже наступал, но у меня, в качестве мусора, было последнее переданное по DMA слово, в итоге, сохраненный исходник при загрузке в EDK показывал в конце текста множество пустых строк, если последним словом было 005015 (<ВК><ПС>, длина занятой части файла четная) да, в придачу еще и как-то неадекватно себя вел, если последнее слово было 000012 (<ПС>0, длина нечетная). А здесь в RT-11 возможны вообще всяческие чудеса.
Это баг или фича? Нужно повторять такое поведение? Сейчас еще раз глянул исходники FatFS, там неполный сектор предварительно считывается.
Далее, определяемся с регистрами. Как я понял, основной, всегда доступный регистр состояния - 176560, т в нем бит Д7 (0200) - готовность к обмену через 176562, так? Еще какие-то адреса есть? Вроде бы загрузчику из сети требовались еще 176564 и 66, они дальше используются? Какие еще биты есть или планируются в 176560?
176564 повторяет значение 176560 при чтении. Я хотел исполбзовать 176566 для чтения кода ошибки, но patron предлагает через команду CHECK.
Это баг или фича? Нужно повторять такое поведение? Баг, вестимо. Положено недописанный остаток блока заполнить двоичными нулями.
176564 повторяет значение 176560 при чтении. Я хотел исполбзовать 176566 для чтения кода ошибки, но patron предлагает через команду CHECK. А 176562 - регистр команд/данных?
Какие биты определены в 176560? Кто из них аппаратный, а кто эмулируется программой Кортекса?
Когда Кортекс занят длительной операцией (прочитать или записать сектор SD-шки) и не исполняет программу эмуляции программных регистров, что видно и что можно записать в РС ? (обращение к РД, как я понимаю, вызовет TRAP TO 4)
Если отправить на запись кусок произвольной длины, то в последнем блоке, в "хвосте"
Насколько мне не изменяет память, контроллеры аналоги RK05, RK06 и 20-ти мбайтный DP (не помню, чей аналог) добивали сектор нулями до 512 байт при записи не полного сектора
Я хотел исполбзовать 176566 для чтения кода ошибки, но patron предлагает через команду CHECK.Если есть лишний регистр - лучше использовать его, а не команду CHECK.
- - - Добавлено - - -
Для битов ошибки и завершения можно использовать младшие биты 176560 ( 01 == DONE ; 02 == ERROR ). Тогда опрос регистра может выглядеть так:
1$: MOV @#176560, R0
BPL 1$
ASR R0
BCS DONE
.......
DONE: ASR R0
BCS ERROR
Jarik65535
02.08.2017, 14:57
В 176560 определен только бит 0200, в старшем байте возвращается 1 - номер станции, но только когда контроллер не занят и только при обращении непосредственно к адресу 176561. УКНЦшный загрузчик делает именно так.
176560 и 176564 - аппаратные, но только по чтению, причем это один регистр просто на двух адресах для эмуляции сетевого адаптера. Эти регистры видны всегда.
Я думаю вопрос с хвостами нужно решать в драйвере, т.к. ухудшить всегда можно.
Можно передавать текущее состояние контроллера в регистре 176566.
Тогда перед чтением каждого слова из регистра данных 176562 - нужно сначала ожидать 200 в 176560, а потом проверять младший байт 176566 на биты DONE ( 200 ) и ERROR ( 001 ).
В старшем байте 176566 всегда читается номер тома последней/текущей операции.
Тогда коды ошибок в младшем байте 176566 могут выглядеть так:
IS_OK = 0000; // нет ошибки ( передача данных продолжается )
IS_SUC = 0200; // нет ошибки ( контроллер готов к приёму команды )
IE_VER = 0211; // неустранимая ошибка (например, внутренняя ошибка контроллера)
IE_OFL = 0221; // устройство offline (образ не подключен)
IE_EOF = 0031; // выход за пределы устройства до EOF ( передача данных продолжается )
IE_BLK = 0231; // выход за пределы устройства после EOF ( передача данных завершена )
IE_WLK = 0241; // попытка записи на защищённое устройство
IE_IFC = 0251; // неверная команда
Jarik65535
02.08.2017, 17:01
Еще не понятно, нужно ли создавать образы, т.е. если образа с нужным номером нет, то можно при попытке чтения выдавать ошибку (0221?), а запись разрешать. Таким образом получатся динамически расширяемые тома, не знаю как на такое отреагирует RT-11. Или вообще забить и создавать образы только на ПК?
Еще не понятно, нужно ли создавать образы, т.е. если образа с нужным номером нет, то можно при попытке чтения выдавать ошибку (0221?), а запись разрешать. Таким образом получатся динамически расширяемые тома, не знаю как на такое отреагирует RT-11. Или вообще забить и создавать образы только на ПК?Забить и создавать образы только на ПК.
Размер подключенного образа не должен изменяться после подключения.
Вообще-то, ИМХО, вполне необременительно можно создать дополнительный функционал работы с файл-образами. Смонтировать файл-образ на виртуальный привод, создать новый файл-образ заданного размера, то есть смонтировать на какой-то виртуальный привод новый пустой диск, как вспомогательное средство - просмотреть оглавление хостовой файловой системы для выбора файл-образа, который следует смонтировать. Это во-первых.
Во-вторых, надо решить вопрос с "хвостами" сейчас. Большинство дисковых устройств аппаратно дописывают хвосты нулями, что упомянутые DEC-овские RK, DM, да и наш MY. Драйвер, в общем-то, о блоках не знает, передает нужное число слов, и вперед, а контроллер сам разбрасывает их по секторам, начиная с полученного при начале операции адреса и подчищая "хвост" в конце.
Но есть контроллеры, которые так не умеют и вся возня с блоками ложится на драйвер. Тот же MX, да и, кажется, DW. Так вот, надо решить, каким быть этому контроллеру.
Мне кажется, что лучше будет, если с блоками будет разбираться драйвер. Поясню. Тут Патрон уже несколько раз предлагал фрагменты программы передачи данных, и все они имеют значительное число проверок. То есть, главный цикл передачи данных оказывается довольно громоздким, и, соответственно, медленным. Несмотря на то, что сама передача данных в уфер или из буфера достаточно быстрая. Таким образом, если драйвер будет знать про блоки, то прямой смысл все проверки сделать до начала передачи данных, а саму передачу блока делать коротким циклом из двух-трех команд без всяких проверок.
Тогда запись будет выглядеть примерно так:
1. Проверяем готовность контроллера.
2. Даем предварительную команду записи
3. Посылаем номер блока двумя словами.
4. Счетчик слов не нужен - он всегда 256.
5. Проверяем, не вызвала ли ошибок эта команда.
6. Без проверок высылаем 256 слов в короткньком цикле - очередной блок данных. Если он последний и счетчик слов кончится раньше 256, чистим "хвост"
7. Даем команду GO.
8. Ждем окончания операции
9. Проверяем, нет ли ошибок и идем на запись следующего блока.
Чтение - аналогично, только команда GO выдается вместе с командой чтения, а пересылка считанных данных будет в конце, после всех проверок на ошибки. Заодно, если считанный блок последний и нужен не весь, остаток можно просто бросить, контроллер, получив следующую команду, о нем забудет.
Таким образом мы, путем небольшого усложнения драйвера, значительно ускорим обмен с устройством - нет нужды проверять состояние контроллера и флаги ошибок для передачи каждого из 256 слов (псевдо)сектора, достаточно выполнить эти проверки для всего сектора целиком.
- - - Добавлено - - -
Да, из дополнительного функционала забыл "демонтировать заданный виртуальный привод".
Jarik65535
02.08.2017, 21:24
На счет списка образов:
А запоминать примонтированные образы где, опять файл создавать? Все-таки жесткие диски это как бы стационарные устройства, ими не нужно часто жонглировать.
И как реализовывать этот дополнительный функционал? В текущей версии контроллера на шину ПП список файлов выводится кусками по 512 байт, начиная с указанного по номеру файла, не очень удобно его получать, и где-то закралась ошибка, что Хобот до сих пор в ярости. Может другие варианты есть? И естественно, без сортировки, на нее может не хватить памяти ни на УКНЦ, ни у кортекса.
Можно принять соглашения о именах, типа nnn.img, где nnn — номер образа с незначащими нулями, и выдавать в каком-нибудь запакованном виде список, типа "с 000 по 012 присутствуют и 015 еще".
Я бы порекомендовал делать именно драйвер максимально небольшим и простым - и в частности всякой дописывание нулей переложить на контроллер. Всё таки 64 к (а то и меньше) доступной памяти
6. Без проверок высылаем 256 слов в короткньком цикле - очередной блок данных.Это если у контроллера есть внутренний буфер на 256 слов. Тогда контроллер успеет принимать/передавать слова со скоростью шины ДВК ( на самом деле ДВК перед запросом каждого слова ещё и считывает из ОЗУ команду, осуществляющую это чтение ). Но если контроллер "прожигает" каждое записываемое слово во флешке отдельно, сразу после его получения - без чтения бита READY не обойтись.
В целом идея работы фиксированными кусками по 256 слов позволяет упростить программу контроллера за счёт усложнения программы драйвера. При таком подходе исчезает ситуация EOF - когда передаётся меньше слов, чем заказал драйвер, а значит - не нужен код ошибки IE_EOF ( 0031 ).
7. Даем команду GO.Это не требуется, потому что запись 256-го слова в буфер контроллера автоматически запускает "прожиг" блока.
8. Ждем окончания операцииЕсли "прожиг" буфера из 256 слов требует у контроллера в 256 раз больше времени, чем прожиг одного слова без буферизации - это ожидание убьёт весь предыдущий выигрыш в скорости.
- - - Добавлено - - -
Можно принять соглашения о именах, типа nnn.img, где nnn — номер образа с незначащими нулямиНа мой взгляд - нужно монтировать в приводы только те файлы на флешке, у которых в самом конце имени файла есть расширение типа ".nnn" ( или префикс типа "nnn." в самом начале ), где nnn - число от 000 до 255, задающее номер тома для подключения. Тогда пользователь сам сможет решать, какие из файлов на флешке в какие приводы подключать, а флешка будет определять это, перебрав список файлов после включения питания.
Затевать бодягу с управлением монтированием только через регистры контроллера - значит требовать наличия программы монтирования в каждой операционной системе, для которой есть драйвер. Если контроллер может сам переименовывать файлы на флешке, добавляя/удаляя ".nnn" в конце ( или в начале ) имени файла при подключении/отключении образа - эту затею можно реализовать тогда, когда всё остальное будет успешно работать.
Jarik65535
02.08.2017, 23:22
Буфер есть, даже килобайт наберется. Можно еще предусмотреть перевод контроллера в исходное состояние, например записью какого-нибудь значение в 176560 перед каждой операцией или когда бит DONE не установлен, полезно когда буфер был передан не полностью. Тем более туда уже пишется 4 для полной инициализации.
Буфер есть, даже килобайт наберется.Поскольку буфер больше блока и меньше максимального запроса - есть смысл выделить буфер на 256 слов и вести чтение и запись кусками не больше блока ( от одного до 256 слов ). При записи меньше 256 слов - контроллер сам добивает буфер нулями.
Всегда передавать только по 256 слов вряд ли имеет смысл, потому что RT-11 иногда читает по 1 слову и тогда принимать от контроллера 256 слов ради одного первого слова - слишком накладно.
Тогда бит DONE не нужен, потому что при любой ошибке контроллер завершает работу, а количества передаваемых слов у контроллера и драйвера всегда совпадают.
Значит - бит 0200 в регистре 176566 можно отдать флагу ошибки.
Тогда коды состояний контроллера в младшем байте регистра 176566 могут быть такими:
IS_SUC = 0000; // нет ошибки
IE_VER = 0210; // неустранимая ошибка (например, внутренняя ошибка контроллера)
IE_OFL = 0220; // устройство offline (образ не подключен)
IE_BLK = 0230; // выход за пределы устройства
IE_WLK = 0240; // попытка записи на защищённое устройство
IE_IFC = 0250; // неверная команда
IE_RD = 0260; // ошибка чтения флешки
IE_WR = 0270; // ошибка записи флешки
Алгоритм работы следующий:
1. ожидаем готовности в 176560 и проверяем бит ошибки в 176566 на каждом шаге.
2. в регистр данных заносим код операции. Если код операции ошибочный - контроллер установит 250 ( если запись невозможна - 240 ) и завершит работу.
3. номер тома. Если к указанному тому не подключен образ - контроллер установит 220 и завершит работу.
4. номер блока в томе (мл.слово)
5. номер блока в томе (ст.слово, 0 для RT-11). Если номер блока больше размера образа - контроллер установит 230 и завершит работу.
6. кол-во слов ( от 1 до 256 ). Если 0 или больше 256 - контроллер установит 210 и завершит работу
7. пишем данные без ожидания готовности и потом ждём готовности и проверяем отсутствие ошибки записи 270 или
ждём готовности, проверяем отсутствие ошибки чтения 260 и затем читаем данные без ожидания готовности.
Это если у контроллера есть внутренний буфер на 256 слов. Тогда контроллер успеет принимать/передавать слова со скоростью шины ДВК ( на самом деле ДВК перед запросом каждого слова ещё и считывает из ОЗУ команду, осуществляющую это чтение ). Но если контроллер "прожигает" каждое записываемое слово во флешке отдельно, сразу после его получения - без чтения бита READY не обойтись. Так с этого все и началось. Предыдущий вариант - на шине ПП УКНЦ - работал именно "на лету", причем успевал без всяких готовностей выполнить цикл обмена за время исполнения одной команды, задержав выдачу СИПа. Но это на ПП, он помедленней, а на ЦП такой вариант не прошел, тайм-аут шины ЦП меньше времени передачи одного слова. Мы с Ярославом пообсуждали и решили делать нечто, в какой-то степени напоминающее DW - в программном режиме быстро заливаем буфер, потом отключаемся от шины, единственный аппаратный регистр сигналит "Думаю, прошу не мешать" (с), а контроллер занимается обменом с флешью.
Если "прожиг" буфера из 256 слов требует у контроллера в 256 раз больше времени, чем прожиг одного слова без буферизации - это ожидание убьёт весь предыдущий выигрыш в скорости. Не знаю, так это, или нет, но время на запись/чтение блока по-любому требуется и это не обойти, а терять его еще и на передаче, ИМХО, не стоит.
А запоминать примонтированные образы где, опять файл создавать? Все-таки жесткие диски это как бы стационарные устройства, ими не нужно часто жонглировать. Я не настаиваю. Это, в общем-то, заявка на программу-максимум.
требовать наличия программы монтирования в каждой операционной системе, для которой есть драйвер. Мы, среди прочего, обсуждали вариант когда после включения с карты, вместо ОС, грузится вторичный загрузчик. Вот он может делать все назначения, переключения и т.п., главное - не вынимать карту и не бежать с ней к писюку. А ддля основной ОС - для УКНЦ это RT-11 - эту программу не грех и сочинить.
Впрочем, все это разговоры на очень дальнее "потом". Сейчас надо запустить это дело в минимальной конфигурации, а дальше видно будет.
Jarik65535, ау! Как успехи?
Jarik65535
12.08.2017, 12:00
Пока еще не занимался, но и не забросил. Скоро должен прийти модуль uSD для ардуино, там и стабилизатор и согласование уровней, прикручу его. Спасибо, что пиннаете. :)
Случайно нашелся разъем (применялся в КНГМД Микроши) чтобы быстро начать прототипирование (макетирование) поделок на шину основного процессора УКНЦ. При укорачивании и для ПП.
Фото как ложатся выводы на китайскую макетку там есть (количество выводов совпадает -) )
тема на маркете http://zx-pk.com/forum/viewtopic.php?f=7&t=8132
Так главная-то беда в этом деле - мамы. Краевой папа элементарно делается лазерным утюгом, а вот куда его втыкать? ОНП-КГ-57-60 в штатном виде отвратительно контачат с проводами шлейфа. Я уже высказывал предположение попробовать прикрутить его к стальной пластине, подложив под нижнюю пластиковую пластину что-нибудь, чтобы поджать ее. Может быть поможет. А может и нет... ИМХО, лучше всего (если влезет, конечно) припаять к маме УКНЦ штырьки 2х30 и напялить на них выписанный с Али IDC-60. Так, как сделал Ярослав (паять туда маму разъема)), ИМХО, делать не стоит - бОльшая часть подобных разъемов после десятка-другого перетыканий начинает терять контакт.
А в моем варианте припаяли штырьки (паять с надетой мамой IDC60, а то могут перекоситься), прорезали на шлейфик пару IDC-60, и вперед! Для экспериментальных поделок режем на один конец шлейфа IDC-60, второй конец шлейфа просто распаиваем на экспериментальной плате. Необязательно иметь 60-проводный шлейф, можно набрать из кусочков, типа три 20-проводных, или еще как. Обжимать разъемы IDC (если конечно, нет спец. инструмента), лучше всего, в тисах - не так быстро, но результат ничуть не хуже.
Из розетки ОНп-КС-23-Р можно сделать нужную маму. Пропилить чуток, предварительно вынув плоскогубцами крайние контакты, чтоб не мешали. Потом приклеить ограничители из пластика или алюминия
Jarik65535
14.08.2017, 11:36
У меня тоже есть вопрос по надежности разъемов ПП. В рамках изучения мной KiCADа, я переразвел плату контроллера и заказал на EasyEDA в этот раз. Теперь разъем с гораздо более длинными и широкими контактами. Все контакты оставляют следы на площадках платы, которые залужены на заводе, толщина платы - 1.6мм. И все равно контакт очень не надежный. Если я такую плату отошлю Хоботу, он же опять разорется, что я впариваю тут нерабочую хрень. На сколько я понимаю, такие контакты не должны быть просто лужеными? Есть способ улучшить контакт в домашних условиях и не сильно заморачиваясь?
Jarik65535, А толщина оригинальных плат точно 1.6, не 1.8 ?
А толщина оригинальных плат точно 1.6, не 1.8 ? Измерил СА, хорошим советским микрометром. 1.55 мм. Других плат у меня нет.
- - - Добавлено - - -
И, кстати, ИМХО, зря лудили, голая медь лучше. (Золото на подслое никеля, конечно, еще лучше, но намного дороже). У меня в Э-60 все мои самоделки засовывались в разъемы голой медью, и работали по паре лет точно. В крайнем случае, если сильно окислится или засульфидится, пройдешь ее шкурочкой-трехнулёвкой (№ 000), и вперед. Перед первым включением, ну и раз в год-два.
Jarik65535
18.08.2017, 18:26
Во время отладки обнаружил очень неприятную вещь. Флюс, который я использую почему-то очень плохо влияет на устройства, не смотря на то, что он на основе глицерина. Затекший под микросхему флюс вызывал различные глюки. Думаю, что это послужило причиной неработоспособности прототипа контроллера на шину ЦП, где я его не смывал с разъема. Кстати, может быть и у Хобота причина в этом, рекомендую ему прогреть плату в духовке (НЕ МИКРОВОЛНОВКЕ!!!), градусах на 200, чтобы флюс выкипел, все равно же плата едва рабочая.
Теперь вопрос по версии для ЦП. Частота работы микроSD, современные карты должны работать на любой частоте, однако более ранние карты требуют инициализации на частоте до 400КГц, с последующим переключением на более высокую. Вопрос в том, надо ли обеспечивать такую совместимость? Можно, например, файл конфигурации сделать, где можно задать частоту работы карты.
Флюс, который я использую почему-то очень плохо влияет на устройства...
Взрослеете, поздравляю !
Года с ~2000-го все производители ( покупных ) флюсов стали поставлять галимую китаёзу, абсолютно ( нецензурно ) качества.
И "ромб" на канистре с флюсом - перестал что-либо значить.
Рецепт, согласованный с Минздравом ( позвольте не цитировать РУ и т.п. доки ) :
1. Спирт этиловый питьевой Экстра-96 ( ничем не заменяется ) - 70...95%. Для прецизионных высокоомных схем - "ХЧ" или еще лучшей очистки.
( желающим приобрести - гуглим "спирт Экстра-96 Москва ).
2. Канифоль эвкалиптовая - 5...30%. Допускается замена на сосновую, строго с "приемкой" ( не китаёзу ).
Есть практика, позволяющая ( после испытаний флюса ) использовать Уайт-спирит. Недостаток метода - вонища, и сохнет на полпорядка дольше.
Достоинство - сборщики не выпьют ( не шутка ).
Методика испытаний флюса :
1. Взять фольгированный стеклотекстолит типа СФ2-35 ( ну или похожий ), фрагмент 10х10 см.
2. Скальпелем организовать ( или профрезеровать ) полоску толщиной 0.50 мм между 2 равными половинами квадрата медной фольги.
3. Промыть образец с моющими средствами ( устранить жир и грязь от рук ).
4. Нанести (обильно ) флюс на место разделительной канавки платы.
5. Высушить согласно КД на флюс - для спиртового - от 6 час при комнатной температуре, Уайт-спирит - не менее суток.
Для особых случаев лучше сушить при температуре от +60 градусов цельсия.
6. Мегаомметром с напряжением измерения от 500 вольт измерить сопротивление между половинами зафлюсованной платы.
Нормально ( тест пройден ) - от 5 мегаом и более.
Ни одна китаёза тест не пройдет.
( Методика не относится к "специальным" и "кислотным" флюсам - тест для них считается пройденным только после смыва флюса ( до измерения сопротивления )).
Частота работы микроSD, современные карты должны работать на любой частоте, однако более ранние карты требуют инициализации на частоте до 400КГц, с последующим переключением на более высокую. Вопрос в том, надо ли обеспечивать такую совместимость? Вероятно надо - иначе не сунешь туда карточку менее 2Г. А в чем проблема? Не знаю, конечно, как там у CyPress, а у STM32 в любой момент по завершении очередной операции хоть SPI, хоть SDIO и до начала следующей, измени несколько битов в регистрах его управления, и все, и SPI, и SDIO будут работать на другой частоте.
Можно, например, файл конфигурации сделать, где можно задать частоту работы карты. Так его надо сначала прочитать, причем на низкой частоте, а то простая uSD (не SDHC) может не проинититься, а затем уже переключаться на боевую частоту. Только, вроде-бы, в ответах SD-карты есть инфа о ее емкости и скорости. Впрочем, спецификцию я проглядел бегло...
А модуль для uSD еще не приехал?
Jarik65535
27.08.2017, 10:46
Тут речь не про SDHC и обычные uSD, а про древние MMC/SD, которые вообще не обязаны работать в режиме SPI. Я думаю не делать файл, а использовать 400КГц, для не SDHC и сколько получится для остальных. Модуль приехал.
модуль для uSD
А можно непосвещённому (от слова свет... знаний :) ) узнать - что за игрушка? :)
Jarik65535
27.08.2017, 11:34
https://ru.aliexpress.com/item/Free-Shipping-Micro-SD-Card-Module-Mini-TF-Card-Read-and-Write-Module-with-SPI-Interface/32478403262.html
TomaTLAB
27.08.2017, 12:11
...а про древние MMC/SD, которые вообще не обязаны работать в режиме SPI.
Как так, не обязаны?
Обмен по SPI с SD картами разных мастей - это же и есть режим совместимости с MMC.
Которые только по SPI и работали изначально, а уже потом расширили до 4-битного SD. Разве нет?
Jarik65535
27.08.2017, 12:45
На сколько я знаю, родной протокол MMC, хоть и 1-битный но не SPI.
Jarik65535, спасибо, понял. Железный порт плюс некоторая обвязка плюс (стандартный) интерфейс подключения.
Железный порт плюс некоторая обвязка плюс (стандартный) интерфейс подключения. Угу. А обвязка - согласователь уровней 3.3 - 5В. Тот PSoC4 весело работает от 5В, а вот SD-карты от такого сдохнут. К сожалению, этот модуль только под SPI, к STM32 по родному SDIO эту платку не подключишь. Но у PSoC4, вроде-бы, и нет SDIO, так, что для этого конкретного варианта ничего не теряем...
Jarik65535
27.08.2017, 14:37
В боевых вариантах преобразователь уровней на резисторах, кстати.
Угу.
Я просто узнать, что это такое :) Естественно, если буду думать про STM32 - буду искать под него.
В боевых вариантах преобразователь уровней на резисторах, кстати. И как работает на мегагерцах, ровно?
- - - Добавлено - - -
Естественно, если буду думать про STM32 - буду искать под него. Если думать про STM32, надо брать готовую китайскую пробную плату с набортным гнездом под карточку.
надо брать готовую китайскую пробную плату
На этапе разработки - безусловно. А если цена приемлема - можно и на заморачиваться на более компактный специализированный вариант.
Jarik65535
27.08.2017, 17:17
На этапе разработки можно просто припаять разъем к переходнику с микроSD на SD, который часто идет в комплекте с карточкой. Тем более для STM32 и уровни преобразовывать не надо.
Тем более для STM32 и уровни преобразовывать не надо. Почему-то в Сети для STM32 рекомендуют подтянуть все сигнальные линии к +3.3в. Утверждают, что без подтяжки оно иногда глючит. Причем номиналы рекомендуют 4.7-10к, что, в общем-то, странно - на частотах порядка 20-50 МГц 1 КОм - и то многовато...
Глянул на пробной карточке с STM32ZET6 и гнездом uSD, подтянуто резисторами 10 кОм. Причем сигналов у SDIO 6 шт, а резисторов подтяжки - 5 шт. Похоже, не подтянут SDIO_CMD.
(Это, кстати, и на тему неотмытых остатков флюса. Если подтяжка к +3.3 критична, остатки флюса могут делать подтяжку к земле...)
Jarik65535
28.08.2017, 11:23
Не знаю на счет всех выводов, но без подтяжки вывода 7 работало очень глючно, инициализировалось только со второго раза и работало только на чтение. А ведь это выход карты, кто же на выход подтяжку ставит то.
кто же на выход подтяжку ставит то. Если вывод с открытым коллектором (стоком), то подтяжка обязательна. Только вот прямо об этом нигде не заявлено...
Jarik65535, ау! Как успехи? Может пора привлекать form'а к написанию драйвера?
Jarik65535
11.09.2017, 12:03
Рано еще привлекать. С изменением скорости SPI на лету тоже не так все просто, думаю 3МГц пока захардкодить.
Jarik65535, как успехи? Я сейчас занимаюсь параллельным проектом на STM32, так у меня получается, что необязательно полностью отключаться от системы на время операции с uSD. Аппаратный селектор адреса узнает, что обратились к нам и выдает сигнал(ы) внешнего прерывания. По этому прерыванию смотрим, пишут нам или читают, если читают, выдаем код "Думаю, прошу не мешать", если пишут - отмечаем, что нужно прервать текущую операцию. После этих действий выдаем СИП. Да, долго, неэффективно (а не фига общаться с нами прополкой), но ни разу не смертельно. Мой 72-МГц STM32 успевает с запасом, думаю, твой 48-МГц CyPress тоже успеет. А по завершении операции с SD-шкой, запрещаем это самое внешнее прерывание и входим в короткий цикл нормальной работы с Q-BUS/МПИ.
Как я понимаю, это чисто программируемые дела, то есть изменений в аппаратуре не требуется. Может попробуешь?
Jarik65535
01.11.2017, 11:27
Я не часто сейчас занимаюсь контроллером. Голова пухнет от этих конечных автоматов, встроенных один в другой. По прерываниям cypress едва успевает на шине ПП, и то надо очень аккуратно обработчик писать, но с аппаратным ответом лучше же. Тоже думал про STM32 особенно F4 какой-нибудь, но там и аппаратная обвязка нужна и преобразователь уровней.
По прерываниям cypress едва успевает на шине ПП, и то надо очень аккуратно обработчик писать, но с аппаратным ответом лучше же. Это если делать в прерывании что-то серьезное. А так (на STM32): аппаратура ущучила обращение к CSR нашего контроллера, в смысле, адрес опознан и пришел СИА. Этот СИА, при опознанном адресе нашего CSR, вызывает внешнее прерывание. 12 тактов займет сама отработка прерывания, то есть аппаратное сохранение PSR, PC, LR, R0-R3 и R12, затем наша программа отработки этого прерывания должна прочитать из GPIO состояние сигналов ВВОД Н и ВЫВОД Н (5-10 тактов, считаем худший случай, 10). Если активен ВВОД Н, переключаем тот порт GPIO, который подключен к ДА00-15 на вывод (5-10 тактов), выдаем туда код "Думаю, прошу не мешать" (2-4 такта) и выдаем СИП. Все, критичное место пройдено, до него 12 + 10 + 10 + 4 == 36 тактов, на частоте 72 МГц это 0.5 мкс, что многократно меньше 10 мкс, которые вызовут тайм-аут МПИ. Далее, простой прополкой, ждем, когда снимется СИА (неважно, сколько там будет тактов), после чего переключаем GPIO шины данных снова на ввод (5-10 тактов), снимаем СИП и выходим из прерывания (пара тактов наших и 12 аппаратных на выход из прерывания, итого 10 + 2 + 12 == 24). Следующая команда, даже в случае прополки нашего контроллера, не будет обращаться к CSR, поэтому эти 24 такта будут некритичны. Обмен с SD-шкой тоже потерпит, занятое прерыванием время Кортекса просто задержит очередную операцию записи/считывания байта или слова. А, может быть, и не задержит, а отнимет это время у нашей прополки аппаратного контроллера SPI, если он используется.
Если же программа прерывания обнаружит не чтение CSR, а запись в него, то считываем порт GPIO шины данных, если там команда СТОП, отмечаем где-то, что надо прекратить обмен, иначе взводим состояние ошибки, после чего уходим туда, где выдают СИП и завершают цикл обмена с МПИ. Тут тоже будет не более 3-4 десятков тактов, т.е. во времянку МПИ мы укладываемся полностью.
Это на 72-МГц STM32F103. На 48-МГц CyPress оно, конечно, будет похуже, но не фатально. Хуже другое - при прямой злобной прополке нашего CSR у нас бОльшая часть времени будет занята отработкой этой самой прополки, из-за чего отработка основных действий будет заметно тормозить. Но это актуально только в начальных загрузчиках, где первичный драйвер должен работать именно в режиме прополки. (В отличие от основного системного драйвера, который работает в прерываниях ЦП и никакой прополки там нет.) Так вот, в рекомендациях по написанию этого первичного драйвера мы, по-простому, укажем требование делать прополку с задержкой - проверили регистр, не понравилось - делаем пустой цикл в сотню-другую команд (или десяток-другой, конкретную цифру уточним) и только после этого суёмся к CSR в следующий раз.
Так вот, когда основная задача, которая принимала блок с SD-шки, или, наоборот, отсылала его на нее, закончит свою работу, закрываем (маскируем) это самое внешнее прерывание и уходим в короткий цикл непосредственного обмена с МПИ.
- - - Добавлено - - -
Да, писал по памяти и слегка напутал - после выдачи СИП надо ждать, пока снимется не СИА, а ВВОД Н или ВЫВОД Н, после чего надо снимать СИП, следом ЦП снимет СИА.
Jarik65535
01.11.2017, 20:39
Единственный плюс — реализация экстренного останова.
А никто не оценивал максимальную частоту прополки на шине ЦП двумя командами, может там не так все плохо?
А никто не оценивал максимальную частоту прополки на шине ЦП двумя командами, может там не так все плохо?На процессоре ВМ1 с частотой 5.3 МГц это ~ 120 кГц, на процессоре ВМ2 с частотой 10 МГц - ~ 210 кГц.
- - - Добавлено - - -
Это если проверять только бит READY. Если по маске проверять (например) бит 40000 - будет ещё на 30% медленнее.
Единственный плюс — реализация экстренного останова.А он обязателен, иначе возможны чудеса. Изредка, конечно, но это еще хуже. Это с RT11FB. А RT11SJ, вместо команды экстренного останова посылает сигнал RESET (СБРОС Н), это тоже надо учитывать.
На процессоре ВМ1 с частотой 5.3 МГц это ~ 120 КГц, на процессоре ВМ2 с частотой 10 МГц - ~ 210 КГц. Своими глазами видел 1201-02 (ВМ2) на которой SPEED.SAV показывала 1 млн регистровых операций в секунду. (Не знаю, кто ее так разогнал, но работала без вопросов. Впрочем, неудивительно: там же мультивибратор без кварца.) То есть, максимальная частота, которую следует ожидать от ВМ2 - 330 кГц (три цикла шины). Впрочем, на УКНЦ, вроде-бы, кварц 8 МГц?
Единственный плюс — реализация экстренного останова. Ну да, я не подумал, у тебя-то все просто: удалось запихнуть в ПЛИС нужную схему, прописал ее в PSoC4, и вперед! А мне делать аппаратный ответ с кодом "Думаю, прошу не мешать" - это пара-тройка лишних микросхем, которые надо распаять/прикрутить на макетке, и все это под гнётом вопроса: а как оно потом разведется на двусторонней печатке? Ибо 4 и более слоев - это резкое удорожание платы. Я тут, как раз, потихоньку клепаю эту самую макетку, плотно сесть и быстро сделать - тоже времени нет...
Единственный плюс — реализация экстренного останова.
А никто не оценивал максимальную частоту прополки на шине ЦП двумя командами, может там не так все плохо?
если надо какой-то кусочек кода или тестовый исполняемый файл на живой УК-НЦшке прогнать дайте знать.
И конечно не мне одному интересны все (любые) подробно\новости по обоим(параллельным) проектам?
hobot дал попробовать такие устройства:
https://pic.maxiol.com/thumbs2/1575309674.1845248586.20191202205750.jpg (https://pic.maxiol.com/?v=1575309674.1845248586.20191202205750.jpg&dp=2)
Белая платка сначала не подавала признаков жизни, но после пропила стала вести себя так-же как и зеленая:
https://pic.maxiol.com/thumbs2/1575309819.1845248586.20191202200314.jpg (https://pic.maxiol.com/?v=1575309819.1845248586.20191202200314.jpg&dp=2)
После показа что на картинке - УКНЦ виснет.
Что бы это значило?
Jarik65535
02.12.2019, 21:34
После показа что на картинке - УКНЦ виснет.
Что бы это значило?
Очень странно. Очевидно, аппаратных проблем нет, работает и эмуляция ПЗУ и чтение с карты, а что это за полосы внизу, без контроллера также? Другие образы пробовали? На СТОП реагирует?
Очень странно. Очевидно, аппаратных проблем нет, работает и эмуляция ПЗУ и чтение с карты, а что это за полосы внизу, без контроллера также? Другие образы пробовали? На СТОП реагирует?
Без контроллера полос нет. Пробовал и другие образы - не помогает. На СТОП не реагирует.
- - - Добавлено - - -
Полосы возникают после выдачи информации на экран.
Jarik65535
02.12.2019, 21:44
А если плату вставить, но с нее не грузиться, то нормально себя ведет?
В другой слот вставил КНГМД с Gotek-ом. Все работает. А гружусь с кассеты - как на фото.
Jarik65535
02.12.2019, 22:01
Отдельно плата тоже проверялась, полагаю. А УКНЦ обычная, без модификаций?
УКНЦ обычная. А как отдельно плату проверить?
Jarik65535
02.12.2019, 22:13
Ну я имел в виду без других контроллеров. Проблема, видимо, при установке драйвера.
Без других контроллеров проверялась в первую очередь.
Меняю на другой слот - без изменений.
Jarik65535
02.12.2019, 22:34
Я не знаю. Две платы вряд ли могут быть неисправны одинаково, могу предположить, что прошивка в вашем экземпляре УКНЦ немного отличается от моего. Или ошибка в ОЗУ ПП? Как вариант, можно попробовать выделить кусок ОЗУ ПП в конце, чтобы загрузчик разместил драйвер по другому адресу.
Проверил контрольные суммы всех ПЗУ. Соответствуют стандартному УКНЦ.
Jarik65535
03.12.2019, 20:36
А светодиодом плата не мигает? Я вообще не понимаю что происходит.
По включению питания светодиод зажигается на 2 секунды и гаснет. После выбора кассеты два раза быстро моргнет во время выдачи на экран сообщений. Затем выдаются полосы и все виснет.
Jarik65535
03.12.2019, 21:04
Не знаю на сколько это реально, можно попробовать сразу после загрузки с кассеты ПЗУ остановить выполнение по СТОП, если это произошло после выделения памяти, то снова запустить по 0 ИСП.
А нет возможности попробовать другой источник питания?
А нет возможности попробовать другой источник питания?
В принципе есть, но нужно делать кабель. Если только в выходные.
Jarik65535
03.12.2019, 22:13
А если 1000 ИСП?
Jarik65535
03.12.2019, 22:49
Т.е. дело не в памяти. Полосы тоже есть? Остался вариант с питанием.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot