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 считывается с устройства.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *