W25Q128Jvsq чем прошить: Аналоги для W25Q128JVSIQ / WINBOND Electronics Co.
|Содержание
Аналоги для W25Q128JVSIQ / WINBOND Electronics Co.
Исходное наименование | i | Упаковка | Корпус | Тип | Подтип | Интерфейс | Объём | Организация | Напряжение | Особенности | T раб | Время доступа | Карточка товара | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
W25Q128JVSIQ (WINBOND)
| в линейках 90 шт | SO-8 SOIC8 | ||||||||||||||
Полностью совместимая по корпусу, выводам и основным параметрам замена | ||||||||||||||||
W25Q128JVEIQ (WINBOND)
| P= |
| 200 шт | WSON-8 | ||||||||||||
W25Q128JVSIQTR (WINBOND)
| P= | — | ||||||||||||||
W25Q128JVEIQ TR (WINBOND)
| P= |
| WSON-8 | |||||||||||||
W25Q128JVEIM (WINBOND)
| P= |
| 9 шт | DFN-8 WDFN8 | ||||||||||||
Аналогичная по основным параметрам (с широкими допусками), но без гарантии совместимости по корпусу или выводам замена | ||||||||||||||||
M25P128-VMF6TP (ST)
| A- | в ленте 1000 шт | ||||||||||||||
MX25L12835FZNI-10G (MX)
| A- |
| 1 шт | DFN-8 WDFN8 | ||||||||||||
MX25L12835FZ2I-10G (MX)
| A- |
| 480 шт | WSON-8 | ||||||||||||
MX25L12835FMI-10G (MX)
| A- | в ленте 44 шт | SO-16 SOIC16 | |||||||||||||
MX25L12835FM2I-10G (MX)
| A- | 92 шт | SOP-8 | |||||||||||||
MX25L12845EMI-10G (MX)
| A- | 2 шт | SO-16 SOIC16 | |||||||||||||
ZD25LQ128AWIGT (ZETTA)
| A- |
| WSON-8 | |||||||||||||
P25Q128H-SUH-IT (PUYA)
| A- |
| — | |||||||||||||
W25Q128JVFIQ TR (WINBOND)
| A- | — | ||||||||||||||
MX25U12835FZ2I-10G (MX)
| A- |
| 1 шт | — | ||||||||||||
W25Q128FVSIG (WINBOND)
| A- | 90 шт | SO-8 SOIC8 | |||||||||||||
W25Q128JVFIQ (WINBOND)
| A- | в линейках 56 шт | SO-16 SOIC16 | |||||||||||||
W25Q128JVPIQ TR (WINBOND)
| A- |
| 1 шт | DFN-8 WDFN8 | ||||||||||||
MX25L12855FXCI-10G (MX)
| A- |
| ||||||||||||||
Товар из одной серии | ||||||||||||||||
W25Q128JVPIM (WINBOND)
| SS |
| 32 шт | DFN-8 WDFN8 | ||||||||||||
W25Q128JVPIQ (WINBOND)
| SS |
| 1 шт | WSON-8 | ||||||||||||
W25Q128JVFIM (WINBOND)
| SS | — | ||||||||||||||
W25Q128JVSIM (WINBOND)
| SS | 1 шт | SO-8 SOIC8 | |||||||||||||
W25Q128JWSIM (WINBOND)
| SS | — | ||||||||||||||
W25Q128JWSIQ (WINBOND)
| SS | 1 шт | — | |||||||||||||
W25Q128JWPIQ (WINBOND)
| SS |
| в линейках 1500 шт | — |
Flash память W25Q128FVSIG и ее последующее применение
Всем Привет!!! Сегодня хочу представить Вашему вниманию микросхемы памяти, Flash память W25Q128FVSIG из Китая и для чего собственно, они мне понадобились. Кому интересно, добро пожаловать под кат
Для переделки регистратора 70mai_d01 он же Xiaomi 70 Minutes Smart WiFi Car DVR, о чем позднее, были заказаны W25Q128FVSIG. Это FLASH память с SPI интерфейсом, объёмом 128 Мбит, в корпусе SO-8. Напряжение питания: 2.7…3.6 В. Рабочая температура: -40…85 °C. Даташит кому интересно
Микросхемы пришли в стандартном желтом конверте и почему-то в zip пакете вместо запечатанного блистера.
Все чипы разных годов выпуска, более того один W25Q128JVSIQ он же самый новый.
<img src=«pic.mysku-st.net/uploads/pictures/04/88/40/2021/03/31/d39900.jpg»
На ножках видны следы пайки, но это не точно.
Вставляю в программатор и проверяю, ну да так и есть, некоторые чипы содержат какую-то прошивку.
Стираю, пишу, проверяю, все работает как надо.
Выводы, чипы с помойки с разборки, но похоже настоящие, не перемаркировка. Хотя у продавца указано что новые, минус ему за это, но главное рабочие и хорошая цена. В известном магазине за эту цену можно купить только один чип, да и ехать надо, но зато новый )))
Теперь, зачем мне это все нужно .
У меня есть регистратор Xiaomi 70 Minutes Smart WiFi Car DVR, останавливаться на его характеристиках не буду, есть куча описаний и примеров работы. Естественно сразу прошивка с китайской озвучкой была обновлена на последнюю актуальною, да еще русифицированную. Так вот верой и правдой он служил мне целый год. И тут начались некоторые глюки. Каждый раз при включении, регик стал просить авторизацию через приложение, раньше такого не было. Сначала грешил на встроенный аккумулятор, но оказалось дело не в нем.
Изучение 4PDA дало некоторую информацию, такой глюк может повторятся из-за модифицированной прошивки с русским языком, перепрошивки помогали, но ненадолго. Не знаю уж что там происходит. По информации пользователей, самая лучшая и надежная прошивка европейская оригинал, с ней проблем никаких не бывает.
Решение, вернуть китайскую прошивку или прошить европейскую оригинал с русским . Но европейская в чип 25q64 который стоит в регике не лезет, потому что звуковые кодеки там другие, более качественные. Поэтому что бы перейти на нее нужно поменять чип на 25q128, который стоит в регистраторах для европейского рынка. Был выбран путь переделки.
Отличия региков
Европейская версия
1: английская озвучка (можно прошить на русскую, не сложно)
2: управление голосом на английском (можно поменять голосовое управление на русское)
3: дороже
4: голосовой движок Nuance
5: встроенной флеш-памяти 128 Мбит (16 Мбайт), из этого вытекает, что
6: памяти под озвучку в два раза больше и, следовательно, озвучка в лучшем качестве: 22kHz, 353 Kbps, 16Bit
7: написано 70MAI на регистраторе
Чистый китаец
1: китайская озвучка (можно прошить на русскую, не сложно)
2: управление голосом на китайском (можно поменять голосовое управление на русское) см. раздел с прошивкой
3: дешевле
4: голосовой движок Alspeech
5: встроенной флеш-памяти 64 Мбит (8 Мбайт), из этого вытекает, что
6: памяти под озвучку в два раза меньше и, следовательно, озвучка в худшем качестве: 8kHz, 128 Kbps, 16Bit
7: написано 70迈 на регистраторе
Качество звука для меня вторично, главное надежность прошивки, ну попробую.
По железу регики ничем не отличаются кроме микросхемы памяти. Сама переделка не сложная. Для начала подготовим прошивку.
Берем прошивку регика для европы SD_CarDV.bin и в любом редакторе удаляем первые 32 байта
Сохраняем.
И заливаем в 25q128.
И приступаем к разбору регистратора, это тоже не сложно, главное аккуратность
Немного приподнимаем наклейку и откручиваем один саморез
С помощью лопатки аккуратно отделяем половинку корпуса, она на защелках
и откручиваем 4 самореза, они держат другую половинку.
Здесь кстати можно подкрутить фокусное расстояние объектива, кому не нравится установленное на заводе, я не трогал.
Сдуваем старый чип, здесь много мелких деталей вокруг, поэтому аккуратно.
очищаем посадочное место
и запаиваем новый прошитый чип.
Включаем регистратор и в приложении проводим процедуру сопряжения заново.
Процедура, повторюсь, довольно простая. На выходе имеем стабильно работающий регистратор с европейской версией.
Материалы по переделке взяты отсюда, там же и прошивки разных версий, с разными озвучками. По прошествии месяца пока все работает стабильно.
Спасибо за внимание, надеюсь было полезно.
A для синтезатора: память Winbond W25Q128JVSQ
Я купил несколько микросхем флэш-памяти у JLCPCB в прошлый раз, когда размещал там заказ, для использования с DCO и везде, где требуется память. Я выбрал Winbond W25Q128JVSQ, так как он был довольно дешев, являлся частью основных частей на JLCPCB и 128 Мбит/16 МБ, которых должно быть достаточно для специалистов по допинг-контролю.
Я думал, что будет довольно легко интегрироваться, но я ошибался! 😀 Я потратил так много времени, чтобы заставить его работать должным образом. Сначала я не мог понять, как туда писать, а потом получил обратно все неправильные значения. Я потратил несколько вечеров на отладку этого маленького жучка, но, НАКОНЕЦ, он работает.
Чип буду подключать к той же шине SPI, что и ЦАП на DCO, поэтому важно, чтобы он работал с тем же режимом SPI, что и DAC8830. К счастью, похоже, что это так, он работает как в режиме SPI 0, так и в режиме 3. Оба они имеют стабильные данные на нарастающем фронте тактового сигнала, в режиме 0 тактовый сигнал находится на низком уровне, а в режиме 3 — на высоком тактовом уровне. Похоже, что DAC8830 работает в режиме 0, так что, думаю, со мной все будет в порядке.
Так что же пошло не так?
Сначала я объясню последнюю вещь — чтение данных. Мне удалось записать данные, но всякий раз, когда у меня было несколько единиц, за которыми следовал ноль, я терял по крайней мере одну единицу, а недостающие байты дополнялись единицами в конце! Я написал 0xAA (0b10101010), но при чтении всегда было 0x87 (0b100001111). Однако первый бит казался правильным во все времена. Я проверил 10-15 различных значений, и картина показалась стабильной.
Я сделал все, что мог придумать — запись в разные ячейки памяти, замену чипа флэш-памяти, замедление шины SPI — я даже думал протестировать память с отдельным PIC16F18346 (например, без ЦАП на шине SPI), но не смог. В моем офисе я ничего не нашел (тестирую с платы DCO).
Наконец-то я попробовал добавить развязывающий колпачок на вход 3v3 микросхемы флэш-памяти, и это сразу заработало! Повторное увеличение скорости шины SPI до 8 МГц также сработало нормально (кстати, 8 МГц SPI с частотой дискретизации 24 млн отсчетов в секунду на Saleae Logic 8 кажется недостаточно быстрым для правильного его считывания).0003
Я так счастлив, но в то же время немного злюсь на себя за то, что не сделал этого с самого начала.
Ну и что еще. Во-первых, версия чипа JVSQ немного особенная — она запускается в режиме, отличном от обычного, но я не думаю, что в итоге я что-то сделал с этим (или, если я это сделал, это сохранялось в первый раз, я надо перепроверить.Также на чипе два контакта -пин 3(HOLD) и пин 7(WP).Они не нужны в нормальной работе.Я пробовал и оставлять их плавающими и подключать к 3v3,похоже оба случая На аудиоплате для Teensy они оба подключены к 3 на 3, так что я думаю, что это более безопасный вариант:
Внимание! Добавьте колпачок 100 нФ между контактом 8 и GND для развязки. При использовании с платой DCO подключите MISO/MOSI и SCLK к контактам шины DAC SPI, а CS — к одному из контактов UTIL |
. резистор от CS до 3v3 необходим.
Теперь к процедуре записи и чтения.
Прежде всего, это флэш-память, которую необходимо стереть перед записью. запись может изменять значения только с 1 на 0, поэтому при стирании все биты устанавливаются в 1.
Чтобы иметь возможность стереть, мы должны сначала снять защиту от записи — каждый раз. Это делается путем отправки 0x06 (в качестве отдельной команды, потяните CS на низкий уровень и верните его на высокий уровень, прежде чем продолжить.
Затем отправьте 0x20 (стирание сектора, стирание 4k байтов. Также доступны стирания большего размера), за которыми следуют три байта адреса, которые должны попасть граница 4k
После этого нам нужно дождаться завершения операции, прежде чем делать что-либо еще Это проверяется отправкой 0x05, а затем чтением результата регистра состояния 1 (в цикле), пока бит 0 не станет 1.
Запись работает так же. Сначала снимите защиту от записи (0x06). Затем отправьте 0x02, затем три байта адреса, а затем от 1 до 256 байтов данных. NB: запись переносится на страницу размером 256 байт, поэтому, если вы не начнете с начала страницы, а напишете 256 байт, вы начнете запись с начала страницы, как только будет достигнут конец.
После завершения нам снова нужно дождаться правильного статуса, так же, как и в случае стирания.
Теперь мы готовы читать. Чтение легко, просто напишите 0x03, за которым следуют три байта адреса, затем прочитайте нужные байты.
SPI
Меня смутили различные режимы SPI. Во-первых, в даташите на PIC16F18346 написано, что данные записываются, передаются при простое в активное или активное в простое. Прошло много времени, прежде чем я понял, что это на самом деле, когда данные ИЗМЕНЯЮТСЯ, а не тогда, когда их следует читать. Передача при простое в активное состояние означает ЧТЕНИЕ при активном в простое.
Что еще хуже, текст в таблице данных флэш-памяти winbond (https://www. winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf) гласит: «Выходной контакт DO используется для чтения данных. или статус от устройства по заднему фронту CLK». Это НЕ режим SPI 0 или 3. К счастью, примеры временных диаграмм показывают, что данные фактически считываются по переднему фронту тактового сигнала, как ожидается для режимов SPI 0 и 3.
Вдобавок ко всему, значения двух параметров режима SPI (CPOL — полярность тактового сигнала и CPHA — фаза тактового сигнала) не совпадают у разных производителей или мест документации. Глядя на эти два, обратите внимание, что значения CPHA для режима 2 и 3 не совпадают:
https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
https://www.analog.com/en/analog -dialogue/articles/introduction-to-spi-interface.html#
Фактические используемые ребра совпадают, так что это просто случай использования разных значений для настроек. Очень запутанно.
Пакет флэш-памяти
— tinygo.org/x/drivers/flash — Пакеты Go
- Константы
- Переменные
- введите Attrs
- функция AT25DF081A() Attrs
- func GD25Q16C() Attrs
- func GD25Q64C() Attrs
- func MX25L1606() Attrs
- func MX25L3233F() Attrs
- func MX25R6435F() Attrs
- func S25FL064L() Attrs
- функция S25FL116K() Attrs
- функция S25FL216K() Attrs
- func W25Q128JVPM() Attrs
- func W25Q128JVSQ() Attrs
- func W25Q16FW() Attrs
- func W25Q16JVIM() Attrs
- func W25Q16JVIQ() Attrs
- func W25Q32BV() Attrs
- func W25Q32FV() Attrs
- func W25Q32JVIM() Attrs
- func W25Q64JVIM() Attrs
- func W25Q64JVIQ() Attrs
- func W25Q80DL() Attrs
- тип Устройство
- func NewSPI(spi *machine. SPI, sdo, sdi, sck, cs machine.Pin) *Device
- func (dev *Device) Attrs() Attrs
- func (dev *Device) Configure(config *DeviceConfig) (ошибка ошибки)
- func (dev *Device) EraseAll() ошибка
- func (dev *Device) EraseBlock (blockNumber uint32) ошибка
- func (dev *Device) EraseBlockSize() int64
- func (dev *Device) EraseBlocks (start, len int64) ошибка
- func (dev *Device) EraseSector (номер сектора uint32) ошибка
- func (dev *Device) ReadAt(buf []byte, addr int64) (int, error)
- func (dev *Device) ReadJEDEC() (JedecID, ошибка)
- func (dev *Device) ReadSerialNumber() (серийный номер, ошибка)
- func (dev *Device) ReadStatus() (байт состояния, ошибка ошибки)
- func (dev *Device) ReadStatus2() (байт состояния, ошибка ошибки)
- func (dev *Device) Size() int64
- func (dev *Device) WaitUntilReady() ошибка
- func (dev *Device) WriteAt(buf []byte, addr int64) (n int, ошибка ошибки)
- func (dev *Device) WriteBlockSize() int64
- func (dev *Device) Ошибка WriteEnable()
- введите DeviceConfig
- тип DeviceIdentifier
- тип DeviceIdentifierFunc
- func (fn DeviceIdentifierFunc) Идентифицировать (id JedecID) Attrs
- введите Ошибка
- func (ошибка ошибки) Ошибка () строка
- введите JedecID
- функция (идентификатор JedecID) Uint32() uint32
- введите серийный номер
Просмотреть исходный код
константа ( // BlockSize — количество байтов в блоке для большей части/всей флэш-памяти NOR Размер блока = 64 * 1024 // SectorSize — количество байтов в секторе для большей части/всей флэш-памяти NOR Размер сектора = 4 * 1024 // PageSize — количество байтов на странице для большей части/всей флэш-памяти NOR Размер страницы = 256 )
Посмотреть исходный код
var DefaultDeviceIdentifier = DeviceIdentifierFunc(func(id JedecID) Attrs { идентификатор переключателя. Uint32() { случай 0x010617: вернуть S25FL064L() случай 0x014015: вернуть S25FL216K() случай 0x1F4501: вернуть AT25DF081A() случай 0xC22015: вернуть MX25L1606() случай 0xC22016: вернуть MX25L3233F() случай 0xC22817: вернуть MX25R6435F() случай 0xC84015: вернуть GD25Q16C() случай 0xC84017: вернуть GD25Q64C() случай 0xEF4015: вернуть W25Q16JVIQ() случай 0xEF4016: вернуть W25Q32FV() случай 0xEF4017: вернуть W25Q64JVIQ() случай 0xEF4018: вернуть W25Q128JVSQ() случай 0xEF6014: вернуть W25Q80DL() случай 0xEF6015: вернуть W25Q16FW() случай 0xEF6016: вернуть W25Q32BV() случай 0xEF7015: вернуть W25Q16JVIM() случай 0xEF7016: вернуть W25Q32JVIM() случай 0xEF7017: вернуть W25Q64JVIM() случай 0xEF7018: вернуть W25Q128JVPM() дефолт: вернуть Attrs{JedecID: id} } })
DefaultDeviceIndentifier — это DeviceIdentifier, способный распознавать
Идентификаторы JEDEC для всех известных устройств памяти в этом пакете. Если ты
нет возможности быть уверенным в типе запоминающего устройства, которое может быть на
доска, на которую вы ориентируетесь, это может быть хорошей отправной точкой для использования.
недостатком использования этой функции является то, что она не позволит компилятору
возможность пометить любую из функций различных устройств как неиспользуемую,
что приводит к большему размеру кода. Если вас беспокоит размер кода, и если вы знаете
заранее вы имеете дело только с ограниченным набором запоминающих устройств, это
может быть целесообразно использовать собственную реализацию DeviceIdentifier
который ссылается только на эти устройства, поэтому другие методы помечаются как неиспользуемые.
Этот раздел пуст.
тип Attrs struct { // TotalSize — это количество байтов, которое может хранить флэш-устройство Общий размер uint32 // StartUp — это продолжительность времени между перезагрузкой устройства и моментом // готово к работе Время запуска. Продолжительность // Три байта ответа на команду 0x9f JEDEC ID. JedecID // Максимальная тактовая частота для всех операций и самый быстрый режим чтения. MaxClockSpeedMHz uint8 // Битовая маска для бита Quad Enable, если он присутствует. 0x00 в противном случае. Это для // старший байт в регистре состояния. QuadEnableBitMask uint8 Логическое значение HasSectorProtection // Поддерживает команду быстрого чтения 0x0b с 8 фиктивными циклами. Поддерживает FastRead bool // Поддерживает быстрое чтение, четырехкратную команду вывода 0x6b с 8 фиктивными циклами. Поддерживает QSPI bool // Поддерживает четырехкратную команду программы ввода страницы 0x32. Это известно как 1-1-4 // потому что для данных используются только все четыре строки. Поддерживает QSPIWrites bool // Требуется отдельная команда 0x31 для записи во второй байт статуса // регистр. В противном случае два байта записываются через 0x01. Логическое значение WriteStatusSplit // Истинно, когда регистр состояния представляет собой один байт. Это подразумевает четверку // Бит разрешения находится в первом байте, а команда Read Status Register 2 // (0x35) не поддерживается. SingleStatusByte bool }
Attrs представляют различия в аппаратных характеристиках и возможностях
различных устройств флэш-памяти SPI.
func AT25DF081A() Attrs
Настройки для флэш-памяти Adesto Tech AT25DF081A 1 МБ SPI. Это на SAMD21
Объявленная доска.
Техническое описание: https://www.adestotech.com/wp-content/uploads/doc8715.pdf
func GD25Q16C() Attrs
Настройки для флэш-памяти Gigadevice GD25Q16C 2 МБ SPI.
Техническое описание: http://www.gigadevice.com/datasheet/gd25q16c/
func GD25Q64C() Attrs
Настройки для флэш-памяти Gigadevice GD25Q64C 8 МБ SPI.
Спецификация: http://www.elm-tech.com/en/products/spi-flash-memory/gd25q64/gd25q64.pdf
func MX25L1606() Attrs
Настройки для флэш-памяти Macronix MX25L1606 2 МБ SPI.
Техническая спецификация:
func MX25L3233F() Attrs
Настройки для флэш-памяти SPI Macronix MX25L3233F 4 МБ.
Техническая спецификация:
http://www.macronix.com/Lists/Datasheet/Attachments/7426/MX25L3233F,%203V,%2032Mb,%20v1.6.pdf
func MX25R6435F() Attrs
Настройки для флэш-памяти Macronix MX25R6435F 8 МБ SPI.
Техническая спецификация:
http://www.macronix.com/Lists/Datasheet/Attachments/7428/MX25R6435F,%20Wide%20Range,%2064Mb,%20v1.4.pdf
По умолчанию он находится в режиме пониженного энергопотребления, который может работать только на частоте 8 МГц. В режиме повышенной мощности
он может работать на частоте 80 МГц.
func S25FL064L() Attrs
Настройки для Cypress (был Spansion) S25FL064L 8 МБ SPI flash.
Техническое описание: http://www.cypress.com/file/316661/download
функция S25FL116K() Attrs
Настройки для Cypress (был Spansion) S25FL116K 2 МБ SPI flash.
Техническое описание: http://www.cypress.com/file/196886/download
func S25FL216K() Attrs
Настройки для Cypress (был Spansion) S25FL216K 2 МБ SPI flash.
Техническое описание: http://www.cypress.com/file/197346/download
func W25Q128JVPM() Attrs
Настройки для флэш-памяти SPI Winbond W25Q128JV-PM 16 МБ. Обратите внимание, что JV-IM имеет
другой .memory_type (0x70)
https://www. winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
func W25Q128JVSQ() Attrs
Настройки для флэш-памяти SPI Winbond W25Q128JV-SQ 16 МБ. Обратите внимание, что JV-IM имеет
другой .memory_type (0x70)
https://www.winbond.com/resource-files/w25q128jv%20revf%2003272018%20plus.pdf
func W25Q16FW() Attrs
Настройки для флэш-памяти Winbond W25Q16FW 2 МБ SPI.
Техническая спецификация:
https://www.winbond.com/resource-files/w25q16fw%20revj%2005182017%20sfdp.pdf
func W25Q16JVIM() Attrs
Настройки для флэш-памяти SPI Winbond W25Q16JV-IM 2 МБ. Обратите внимание, что JV-IQ имеет
другой .memory_type (0x40)
https://www.winbond.com/resource-files/w25q16jv%20spi%20revf%2005092017.pdf
func W25Q16JVIQ() Attrs
Настройки для флэш-памяти SPI Winbond W25Q16JV-IQ 2 МБ. Обратите внимание, что JV-IM имеет
другой .memory_type (0x70)
https://www.winbond.com/resource-files/w25q16jv%20spi%20revf%2005092017.pdf
func W25Q32BV() Attrs
Настройки для флэш-памяти SPI Winbond W25Q32BV 4 МБ.
Техническая спецификация:
https://www.winbond.com/resource-files/w25q32bv_revi_100413_wo_automotive.pdf
func W25Q32FV() Attrs
Настройки для флэш-памяти SPI Winbond W25Q32FV 4 МБ.
Техническое описание: http://www.winbond.com/resource-files/w25q32fv%20revj%2006032016.pdf?__locale=en
func W25Q32JVIM() Attrs
Настройки для флэш-памяти Winbond W25Q32JV-IM 4 МБ SPI.
Техническая спецификация:
https://www.winbond.com/resource-files/w25q32jv%20revg%2003272018%20plus.pdf
func W25Q64JVIM() Attrs
Настройки для флэш-памяти SPI Winbond W25Q64JV-IM 8 МБ. Обратите внимание, что JV-IQ имеет
другой .memory_type (0x40)
http://www.winbond.com/resource-files/w25q64jv%20revj%2003272018%20plus.pdf
func W25Q64JVIQ() Attrs
Настройки для флэш-памяти SPI Winbond W25Q64JV-IQ 8 МБ. Обратите внимание, что JV-IM имеет
другой .memory_type (0x70)
http://www.winbond.com/resource-files/w25q64jv%20revj%2003272018%20plus.pdf
func W25Q80DL() Attrs
Настройки для флэш-памяти Winbond W25Q80DL 1 МБ SPI.
Техническая спецификация:
https://www.winbond.com/resource-files/w25q80dv%20dl_revh_10022015.pdf
тип Структура устройства { // содержит отфильтрованные или неэкспортированные поля }
Устройство представляет собой устройство флэш-памяти NOR, доступное через SPI
func NewSPI(spi *machine.SPI, sdo, sdi, sck, cs machine.Pin) *Device
NewSPI возвращает указатель на флэш-устройство, которое использует периферийное устройство SPI для
обмениваться данными с последовательной микросхемой памяти.
func (dev *Device) Attrs() Attrs
Attrs возвращает атрибуты устройства, определенные из самых последних
вызов Configure(). Если вызов Configure() не был выполнен, это будет
нулевое значение структуры Attrs.
func (dev *Device) Configure(config *DeviceConfig) (err error)
Configure настраивает устройство и базовый транспортный механизм.
Аргумент DeviceConfig позволяет вызывающей стороне указать экземпляр
Интерфейс DeviceIdentifier, который, если он предоставлен, будет использоваться для получения
атрибуты устройства на основе JEDEC ID.
func (dev *Device) Ошибка EraseAll()
EraseChip стирает всю микросхему флэш-памяти
func (dev *Device) EraseBlock(blockNumber uint32) ошибка
EraseBlock стирает блок памяти по указанному индексу
func (dev *Device) EraseBlockSize() int64
EraseBlockSize возвращает наименьшую стираемую область на данном конкретном чипе
в байтах. Это используется для размера блока в EraseBlocks.
Для флэш-памяти SPI NOR это размер сектора, обычно/всегда 409.6.
func (dev *Device) EraseBlocks(start, len int64) error
EraseBlocks стирает заданное количество блоков. Реализация может
прозрачно объединять диапазоны блоков в более крупные пакеты, если чип
поддерживает это. Параметры start и len указаны в номерах блоков, используйте
EraseBlockSize для сопоставления адресов с блоками.
func (dev *Device) EraseSector(sectorNumber uint32) ошибка
EraseSector стирает сектор памяти по заданному индексу
func (dev *Device) ReadAt(buf []byte, addr int64) (int, error)
ReadAt удовлетворяет требованиям интерфейса io. ReaderAt и заполняет предоставленный буфер
с чтением памяти из устройства, начиная с предоставленного адреса.
func (dev *Device) ReadJEDEC() (JedecID, ошибка)
ReadJEDEC считывает JEDEC ID с устройства; затем этот идентификатор можно использовать для
выяснить атрибуты чипа из списка известных устройств.
func (dev *Device) ReadSerialNumber() (SerialNumber, ошибка)
ReadSerialNumber считывает серийные номера с подключенного устройства.
TODO: возможно, проверьте, правильный ли порядок байтов/порядок байтов, возможно, нет
func (dev *Device) ReadStatus() (байт состояния, ошибка ошибки)
ReadStatus считывает значение из регистра состояния 1 устройства
func (dev *Device) ReadStatus2() (байт состояния, ошибка ошибки)
ReadStatus2 считывает значение из регистра состояния 2 устройства
func (dev *Device) Size() int64
Size возвращает размер этой памяти в байтах.
func (dev *Device) Ошибка WaitUntilReady()
WaitUntilReady запрашивает регистр состояния до тех пор, пока устройство не будет готово к
следующая операция.
func (dev *Device) WriteAt(buf []byte, addr int64) (n int, err error)
WriteAt удовлетворяет интерфейсу io.WriterAt и записывает данные на устройство,
одну страницу за раз, начиная с указанного адреса. Этот метод предполагает
что место назначения уже стерто.
func (dev *Device) WriteBlockSize() int64
WriteBlockSize возвращает размер блока, в который могут быть записаны данные
Память. Он может использоваться клиентом для оптимизации операций записи, записи без выравнивания.
всегда должны работать корректно.
Для флэш-памяти SPI NOR это размер страницы, обычно/всегда 256.
func (dev *Device) Ошибка WriteEnable()
type DeviceConfig struct { Идентификатор DeviceIdentifier }
DeviceConfig содержит параметры, которые можно задать при настройке
устройство флэш-памяти.
тип интерфейса DeviceIdentifier { // Идентификация возвращает структуру Attrs на основе предоставленного JEDEC ID Идентифицировать (id JedecID) Attrs }
DeviceIdentifier может быть передан методу Configure() флэш-устройства
для того, чтобы предоставить средства обнаружения атрибутов, специфичных для устройства, на основе
JEDEC ID считывается с устройства.