- Как воспроизвести Flash-контент в браузере в 2021 году
- Как установить Ruffle
- Firefox
- Chrome и браузеры на Chromium
- Насколько эффективно Ruffle справляется с эмуляцией Flash?
- Чтение и запись флеш-памяти с помощью Arduino на примере микросхемы 25L8005
- 1 Микросхема флеш-памяти25L8005
- 2 Подключение Arduino к микросхеме flash-памяти 25L8005
- 3 Очистка флеш-памяти с помощью Arduino
- 4 Запись данных в флеш-память с помощью Arduino
- 4 Чтение данных из флеш-памяти с помощью Arduino
- Скачать вложения:
- Поделиться
- Похожие материалы (по тегу)
- Последнее от aave
- Другие материалы в этой категории:
- 11 комментарии
Как воспроизвести Flash-контент в браузере в 2021 году
Технология Adobe Flash не будет поддерживаться в 2021 году. Компания Adobe уже выпустила финальные обновления для Flash в декабре 2020 года и официально объявила об отключении Flash в 2021 году. Все основные браузеры, такие как Chrome, Edge и Firefox перестанут поддерживать Flash. Но что делать обычному пользователю, если ему понадобиться получиться доступ к Flash-контенту после 2020 года? И что случится с огромным количеством Flash-контента, размещенного в Интернете?
Один из доступных вариантов — использование проектов по сохранению Flash-контента. Например, Flash Games Preservation Project содержит сотни гигабайт флэш-игр и анимаций, а создатели Internet Archive подготовили эмулятор Flash, который позволит воспроизводить флэш-контент прямо на веб-ресурсе.
Internet Archive использует эмулятор Ruffle, который написан на Rust и поддерживает все современные операционные системы и браузеры с поддержкой WebAssembly. Разработчики Ruffle даже создали отдельные расширения для Firefox, Safari и браузеров на основе Chromium, таких как Chrome, Edge, Brave, Opera или Vivaldi.
Установка Ruffle в браузере позволяет добавить поддержку эмуляции Flash. Браузер будет автоматически обнаруживать Flash-контент, и вы сможете беспрепятственно его воспроизвести, как если бы Flash все еще был установлен.
Как установить Ruffle
На текущий момент расширение Ruffle не размещено в Интернет-магазине Chrome и в магазине дополнений для Firefox (Mozilla Add-ons Store). Расширение пока находится в разработке, поэтому рекомендуется его использовать на тестовых системах и на устройствах для разработки.
Firefox
Чтобы установить расширение Ruffle пользователям Firefox нужно выполнить следующие шаги:
- Загрузите новейшую версию Ruffle для Firefox с официального сайта (выберите Сохранить объект как. , чтобы загрузить файл в виде XPI файла).
- Откройте внутреннюю страницу about:debugging в браузере.
- Выберите «Этот Firefox» (или этот Nightly) в боковой панели.
- Нажмите кнопку Загрузить временное дополнение…
- Выберите скачанный файл XPI, чтобы загрузить его как временное расширение Firefox
Расширение будет загружено лишь на временной основе, после перезапуска браузера оно будет удалено.
Chrome и браузеры на Chromium
- Загрузите новейшую версию Ruffle для браузеров на основе Chromium с официального сайта.
- Распакуйте архив после загрузки.
- Откройте внутреннюю страницу chrome://extensions/ в браузере.
- Включите режим разработчика на открывшейся странице.
- Выберите опцию Загрузить распакованное расширение и укажите папку, в которую вы распаковали расширение.
Насколько эффективно Ruffle справляется с эмуляцией Flash?
Текущая версия Ruffle поддерживает эмуляцию не любого Flash-контента. Это означает, что вы можете столкнуться с флеш-элементами, которые нельзя воспроизвести с помощью текущих версий эмулятора. Разработчики обещают расширить совместимость с Flash в будущих версиях Ruffle.
Ruffle — удобное решение, позволяющее восстановить поддержку Flash в браузерах. Хотя на данном этапе эмуляция не идеальна, существует множество флеш-приложений и игр, которые уже отлично работают в Ruffle.
Источник
Чтение и запись флеш-памяти с помощью Arduino на примере микросхемы 25L8005
1 Микросхема флеш-памяти25L8005
Поэтому сначала нужно сделать так, чтобы мы могли с лёгкостью подключиться к микросхеме флеш-памяти. Для этого можно воспользоваться либо специальным переходником, к которому придётся припаять микросхему, либо (что предпочтительнее) использовать панель с нулевым усилением (т.н. панель ZIF , купить можно на Али).
Флеш-память припаяна к плате-переходнику
А вот так выглядит микросхема флеш-памяти в ZIF-панели:
Флеш-память в переходной панели с нулевым усилением
И под микроскопом:
Флеш-память в панели с нулевым усилением под микроскопом
Купить ПЗУшку можно, например, в Китае.
Теперь мы можем использовать макетную плату (бредборд) и с лёгкостью подключаться к микросхеме.
2 Подключение Arduino к микросхеме flash-памяти 25L8005
Назначение выводов микросхемы флеш-памяти 25L8005
Кстати, datasheet на микросхему флеш-памяти 25L8005 можно скачать в конце статьи.
Будем использовать для программирования флэш-памяти интерфейс SPI , поэтому подключимся к стандартным SPI выводам Arduino:
Вывод микросхемы флеш-памяти | Вывод платы Arduino |
---|---|
CS# | цифровой пин 10 |
SI | цифровой пин 11 |
SO | цифровой пин 12 |
SCLK | цифровой пин 13 |
WP# | 3V3 |
HOLD# | 3V3 |
VCC | 3V3 |
GND | GND |
Здесь символом решётки # отмечены выводы, которые активируются логическим нулём.
Соберём электрическую схему подключения микросхемы флеш-памяти MX25L8005 к Arduino.
Схема подключения микросхемы флеш-памяти 25L8005 к Arduino
Флеш-память на ZIF-панели, подключённая к Arduino
Флеш-память на ZIF-панели, подключённая к Arduino
3 Очистка флеш-памяти с помощью Arduino
Перед тем как записывать данные в флеш-память, необходимо стереть тот сектор или страницу, в который мы собираемся записывать. Если записываемых данных немного (в нашем учебном примере это будут всего 16 байт), то достаточно стереть 1 сектор. Из документации на микросхему мы видим, что последовательность стирания такая: выставить разрешение на запись (1 байт), послать команду на стирание (1 байт) и адрес (3 байта), выставить запрет записи (1 байт). Данная последовательность приведена на рисунке ниже:
Диаграмма очистки одного сектора флеш-памяти 25L8005
Именно это и делает приведённый ниже скетч:
Загрузим этот скетч в Arduino с подключённой по приведённой выше схеме микросхемой памяти. После того как он отработал, флешка готова к записи.
4 Запись данных в флеш-память с помощью Arduino
Теперь запишем на неё данные. Для примера возьмём небольшой массив из 16-ти байтов. Как видно из документации, для записи данных во флеш сначала нужно выставить разрешение на запись (1 байт), затем послать команду на запись (1 байт), передать начальный адрес (3 байта) и данные (в нашем примере 16 байт), а в конце выставить запрет записи (1 байт):
Диаграмма записи данных во флеш-память 25L8005
Напишем скетч, который записывает массив из 16-ти байт данных в ПЗУ :
Загрузим скетч в Arduino. Кстати, вот так выглядит на логическом анализаторе обмен по SPI между Arduino и ПЗУ 25L8005, когда выполняется данный скетч.
Временная диаграмма записи в ПЗУ массива данных по SPI
После выполнения данного скетча во флеш-память должен был записаться наш тестовый массив. Давайте проверим, так ли это.
4 Чтение данных из флеш-памяти с помощью Arduino
Согласно документации, чтение из флешки выполняется посредством такой последовательности: отправка команды на чтение (1 байт), начальный адрес (3 байта), а далее запрашивается столько байтов, сколько хотим прочитать из ПЗУ . Собственно, мы будем передавать в ПЗУ 16 нулей. Так как SPI – синхронный интерфейс, нам в ответ вернутся 16 записанных в ПЗУ байтов. Вот такая диаграмма приводится в описании к микросхеме:
Диаграмма чтения данных из флеш-памяти 25L8005
Напишем скетч для чтения наших заветных 16-ти байт из микросхемы флеш-памяти 25L8005:
Загрузим скетч в Arduino и откроем монитор последовательных портов. В мониторе, как и ожидалось, 1 раз в секунду будет выводиться наш массив, считанный из флеш-памяти с помощью Arduino.
Чтение из флеш-памяти с помощью Arduino и вывод в монитор последовательных портов
Временная диаграмма чтения данных из ПЗУ по SPI
Как видно, байты этого массива соответствуют кодам ASCII строки «HELLO, SOLTAU.RU», которые мы и записали в микросхему памяти 25L8005 🙂
Скачать вложения:
Поделиться
Похожие материалы (по тегу)
Последнее от aave
Другие материалы в этой категории:
11 комментарии
Спасибо, все понятно написано, благодаря вашей статье быстро разобрался!
Гриша, я рад, что смог вам помочь!
Доброго времени суток!
Подскажите, инструкция подходит для работы с W25Q64 ?
Пока в наличии нет (жду посылку), ищу инструкцию для работы с указанной flash памятью.
Буду благодарен за помощь!
Никита, доброго времени!
Я не изучал подробно вашу ПЗУшку W25Q64, но с первого взгляда она очень похожа на описываемую здесь. По крайней мере, подключение аналогично (если берём в том же корпусе), а на 21-ой странице datasheet приведён набор инструкций SPI, в котором команды чтения, записи, разрешения записи и некоторые другие аналогичны. Надо, конечно, ознакомиться внимательнее, но в целом ничего сложного тут нет. Действуйте согласно документации разработчика. Соберите схему и начните изучать работу с микросхемой с чтения регистров. Хорошие кандидаты для начала — регистры Device ID (0x90), JEDEC ID (0x9F). Если «пощупаете» их, прочитаете значения, которые должны там быть согласно документации, то станет понятно, что вы на верном пути, и это придаст уверенности в дальнейшем изучении.
Большое спасибо за ответ!
Доброго времени суток! Прочитал и отработал ваши примеры в данной статье на микросхеме флэш памяти W25Q32FV. Спасибо за материал. Всё работает нормально. Начал экспериментировать с кодом.
В вашем примере адрес передается тремя байтами ADDR1, ADDR2, ADDR3. Разобрался по даташиту со структурой памяти W25Q32FV но всё равно возникли вопросы.
Как записать данные в другой адрес отличного от примера? То есть, как записать и как разбить, например адрес типа 8192 (0x2000h) начального байта сектора 2, на три байта и приписать их переменным ADDR1, ADDR2, ADDR3 . Пробовал по разному. У меня получилось только побитовой передачей в цикле for.
ПРИМЕР:
const byte ADDR[24] = <0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0>; //24-битный адрес 0x2000h в двоичном виде и в массиве
for(byte b=0; b = 24; b++)
И ещё вопрос не по теме:
В ардуино к сожалению не работает оператор round с указанием количества знаков после запятой.
То есть, выражение:
float number = 1,674938;
float VOLT = round(number,2); //округление до двух знаков после запятой.
НЕ РАБОТАЕТ. Оператор «round» в ардуино умеет округлять только до целых чисел.
Работает следующий вариант:
float number = 1,674938;
int NUM = round(number * 100); //умножаем на 100 и округляем до целых чисел. Получаем 167.
float VOLT = float(NUM / 100); //167 делим на 100 и получаем 1.67
Это я проверял. Это правда или я что-то не так делаю?
Сергей, что касается записи ПЗУшек, то в двух словах, ADDR1. ADDR3 — это 24-разрядный адрес, который следует читать как одно большое число. Например, адрес 8192 будет записываться как 0x002000 — теми же 24-мя битами (3 байта). Судя по тому, что я вижу в даташите, в вашем случае адрес передаётся аналогично — 3-мя байтами. Адресное пространство ПЗУшки состоит из 64-х блоков по 64 кб, т.е. в каждом блоке адреса с 0x000000 по 0x00ffff.
А что касается округления чисел. В штатной библиотеке ардуино функция round() умеет округлять только до целого числа, так и есть. Ваш вариант с умножением и потом делением рабочий. Можно ещё вот так сделать:
double p = 3.14159265359;
void setup()
<
Serial.begin(9600);
Serial.println(p, 10); // выводим с точностью до 10 знаков
Serial.println(roundTo(p, 2), 10); // округляем до 2-х знаков и выводим 10 после запятой
Serial.println(roundTo(p, 3), 10); // округляем до 3-х и выводим 10
Serial.println(roundTo(p, 4), 10); // округляем до 4-х и выводим 10
>
double roundTo(double value, int decimal)
<
double pwr = pow(10, decimal);
return (round(value * pwr) / pwr);
>
Вывод данного скетча будет:
3.1415927410
3.1400003433
3.1420006752
3.1416006088
Если обратите внимание, даже вывод числа с такой большой точностью в первой строчке уже некорректен. Микроконтроллер не очень дружит с точной математикой.
Источник