DS2431 запись и чтение

Anvil
Offline
Зарегистрирован: 01.07.2013

Здравствуйте. подскажите как записывать и считывать данную память. Считать вроде кое как получилось, но не уверен что верно. Может кто распологает примером под Arduino или AVR. Челательно на C.

macbew
Offline
Зарегистрирован: 19.05.2014

Тоже интересует этот вопрос. Нашел библиотеку для чтения и записа OneWire. возможно ли прочесть и скопировать данные , затем очистить и перезаписать другие?

Maverik
Offline
Зарегистрирован: 12.09.2012

http://forum.arduino.cc/index.php?topic=18198.0

для ds2431 при проблемах с записью рекомендуют доп.резистор 2.2 кОм в дополнение к "стандартному" 10кОм.   код для ардуины есть здесь :

http://www.instructables.com/id/Bus-Pirate-3EEPROM-explorer-board/step4/DS2431-1-Wire-EEPROM/

 

macbew
Offline
Зарегистрирован: 19.05.2014

Спасибо что откликнулись. Суть проблемы: это чип картриджа, хотелось бы не менять каждый раз при окончании чернила, а заправлять. чип исполнен в корпусе TSOC.

Первую тему видел, оттуда взял скетч для чтения.(запись пока не трогал).

по второй ссылке ничего знакомого не нашел. не понимаю что такое "пиратка". 

    Подключал через резистор 4.7 кОм, как сказано в другой статье для чтения OneWire. 

Счас вопрос стоит о перезаписи? нужно значения данных в (так понимаю) епром.  

macbew
Offline
Зарегистрирован: 19.05.2014

Ребята помоги пожалуйста разобраться в коде.  Слил даныне с одного чипа, хочу залить его в другой чип. как воспользоваться функцией записи? 

//BYTE, BIN (двоичный), OCT (восьмиричный), DEC (десятеричный), HEX (шестнадцатеричный)

#include <OneWire.h>

OneWire  ds(2);    // 1-wire on pin 2
byte     addr[8];  // Contains the eeprom unique ID //Этой колонке указан EEPROM уникальный идентификатор
//-------------------------------------------------------------------------

void setup(void)  // запускается только один раз рп истарте

{
 Serial.begin(9600); // ативацию сериал соединения для в/вывода на экран
}
// ----------------------------------------------------------------------

void loop(void) // функцию повторяющаяся постоянно

{
 byte i;  // инициализация переменно как байты  
 byte dat[13];  // инициалтзация массива как байт

 SearchAddress(addr); // функция поиска адреса

 dat[0] = 0x01;
 dat[1] = 0x02;
 dat[2] = 0x03;
 dat[3] = 0x04;
 dat[4] = 0x05;
 dat[5] = 0x06;
 dat[6] = 0x07;
 dat[7] = 0x08;
 
 //WriteRow(0,dat); // функция записи
 ReadAllMem();    //print all mem content//печатать все сообщения MEMогу// функция чтения
 
 while(1); // повторять пока не будет ровно 1ному
}
//-----------------------------------------------------------------------------------------

void SearchAddress(byte* address) //Search for address and confirm it//функция Поиск адреса 

{
 int i; // инициализациия переменной как числовое (от -2^15 до -2^14)
 if ( !ds.search(address)) //операттор "если" неДС то
 {
   Serial.print("No device found.\n"); // отправить в серил "нет устройства"
   ds.reset_search(); // перезапуск поиска устройства
   delay(250); //пауза в 0.25 сек
   return; // сброс функции
 }
 
 Serial.print("ADDR= ");
 for( i = 0; i < 8; i++)
 {
   Serial.print(address[i], HEX);
   Serial.print(" ");
 }

 if ( OneWire::crc8( address, 7) != address[7])
 {
     Serial.print("CRC is not valid, address is corrupted\n");
     return;
 }
 
 if ( address[0] != 0x2D) 
 {
     Serial.print("Device is not a 1-wire Eeprom.\n");
     return;
 }
 Serial.println();
}
//-------------------------------------------------------------------------------------------

void WriteReadScratchPad(byte TA1, byte TA2, byte* data)//чтение-запись в сверхоперативную память

{
 int i;
 ds.reset();
 ds.select(addr);
 ds.write(0x0F,1);  // Write ScratchPad//Написать свПамять
 ds.write(TA1,1); 
 ds.write(TA2,1); 
 for ( i = 0; i < 8; i++)
   ds.write(data[i],1);  
 
 ds.reset();
 ds.select(addr);    
 ds.write(0xAA);         // Read Scratchpad// чтение свпамяти
 
 for ( i = 0; i < 13; i++)     
   data[i] = ds.read();
}
//---------------------------------------------------------------------------------------------------------------

void CopyScratchPad(byte* data)        //функция копирование из сверхоперативной памяти в основную память 

{
 ds.reset(); //перезагрузка соединения
 ds.select(addr); // выбор адреса
 ds.write(0x55,1);  // Copy ScratchPad//копировать из сверхопер памяти в основную
 ds.write(data[0],1); 
 ds.write(data[1],1);  // Send TA1 TA2 and ES for copy authorization// 
 ds.write(data[2],1); 
 delay(25); // Waiting for copy completion
 //Serial.print("Copy done!\n");
}

//------------------------------------------------------------------------------------------------------------------

void ReadAllMem() //функция чтения памяти

{
 int i;
 ds.reset();
 ds.select(addr);
 ds.write(0xF0,1);  // Read Memory
 ds.write(0x00,1);  //Read Offset 0000h
 ds.write(0x00,1);
 
 for ( i = 0; i < 128; i++) //whole mem is 144 //вся память состоит из 144 байт
 {
   Serial.print(ds.read(), HEX);
   Serial.print(" ");
 }
 Serial.println();
}
//------------------------------------------------------------------------------------------------


void WriteRow(byte row, byte* buffer)

{
 int i;
 if (row < 0 || row > 15) //There are 16 row of 8 bytes in the main memory//Существуют 16 строке 8 байт в основной памяти
   return;                //The remaining are for the 64 bits register page//Остальные предназначены для 64 бит Страницы регистрации
   
 WriteReadScratchPad(row*8, 0x00, buffer);
 
 /*  Print result of the ReadScratchPad//Распечатать результат ReadScratchPad
 for ( i = 0; i < 13; i++) 
 {
   Serial.print(buffer[i], HEX);
   Serial.print(" ");
 }
 */
 CopyScratchPad(buffer);
 
}

раскоментить функцию записи , это понятно. а куда данные слитого чипа вставлять, что бы он их записал?

teslarvz
Offline
Зарегистрирован: 20.03.2019
dat[0] = 0x01;
025  dat[1] = 0x02;
026  dat[2] = 0x03;
027  dat[3] = 0x04;
028  dat[4] = 0x05;
029  dat[5] = 0x06;
030  dat[6] = 0x07;
031  dat[7] = 0x08;

Это строки записи данных.

yuhenotix@2p-ma...
Offline
Зарегистрирован: 09.06.2019

Откуда этот исходник ?