Добрый день, начинаю закипать. Пытаю DS1993. В даташите написано что он имеет 4096 байт памяти. 16 страниц по 256 байт. Записывать и считывать данные в память получилось используя команды из даташита. Но особо не понимаю в адресации. Как я понимаю в таблетке есть 16 страниц по 256 байт. В моем понятии чтобы записть в нулевую страницу памяти в 42 байт необходимо подать адресный байт 002А. Но по даташиту он находится на 1 странице. Еще там написано что есть 5 адресных бит которые указывают на одно из 32 возможных расположений байта на странице. Так откуда 32 расположения если должно быть 256. В общем может не правильно изъясняю, но прошу помощи(((
Спасибо, уже байт от бита отличить не могу)) 32 возможных байта по 8 бит = 256 бит на странице все сошлось. Надо быть внимательней.
Может кому пригодиться - конечно не по феншую но работает. Код (C++): #include <OneWire.h> OneWire ds(2); // линия 1-Wire будет на pin 2 byte i; byte j; byte ES; byte TA1; byte TA2; char rdata[32]; byte Scratchpad1[16] = {0x00, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0, 0xE0, 0x00, 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0, 0xE0}; byte Scratchpad2[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; char wdata[32] = "Ivanov Ivan Ivanovich 01.01.16"; void setup(void) { Serial.begin(9600); } void loop(){ Serial.println("Стираем всю память! Приложите ТМ..."); delay(2000); //Стирание всей памяти for(i = 0; i < 16; i++) { ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0x0F); //Запись в Scratchpad ds.write(Scratchpad1[i]); ds.write(Scratchpad2[i]); for(j = 0; j < 32; j++) { ds.write(0); } //Чтение переданных данных ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0xAA); TA1 = ds.read(); TA2 = ds.read(); ES = ds.read(); //Передача кода авторизации и копирование из Scratchpad в память ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0x55); ds.write(TA1); ds.write(TA2); ds.write(ES); } Serial.println("Память стерта! Уберите ТМ..."); delay(2000); Serial.println("Записываем в память! Приложите ТМ..."); delay(2000); //Стирание всей памяти for(i = 0; i < 16; i++) { ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0x0F); //Запись в Scratchpad ds.write(Scratchpad1[i]); ds.write(Scratchpad2[i]); for(j = 0; j < sizeof(wdata); j++) { ds.write(wdata[j]); } //Чтение переданных данных ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0xAA); TA1 = ds.read(); TA2 = ds.read(); ES = ds.read(); //Передача кода авторизации и копирование из Scratchpad в память ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0x55); ds.write(TA1); ds.write(TA2); ds.write(ES); } Serial.println("Запись произведена! Уберите ТМ..."); delay(2000); Serial.println("Считываем всю память! Приложите ТМ..."); delay(2000); for(i = 0; i < 16; i++) { ds.reset(); ds.write(0xCC); //Пропуск чтения ROM ds.write(0xF0); //Команда чтения ds.write(Scratchpad1[i]); ds.write(Scratchpad2[i]); for(j = 0; j < 32; j++) { rdata[j] = ds.read(); } Serial.println(rdata); } Serial.println("Память считана! Уберите ТМ..."); delay(2000); }