Программа в целом будет похожа на SVEN POWER MANAGER II

advertisement
В МАП можно
1) Прочитать любую ячейку EEPROM по адресам 0 – 1023 (в том числе страницей по
16 байт)
2) Прочитать некоторые динамические данные, которые хранятся в памяти начиная с
адреса 1024 (в том числе страницей по 16 байт). Список данных в памяти тестовой
прошивке.
3) Записать байт в EEPROM по адресам 5 – 1023
4) Послать команду. Команда передается как запись байта по адресам a0a1a2=0-4
(реально только по адресу 0, другие как резерв на будущее). Список команд в тестовой
прошивке.
Протокол следующий :
Посылка от PC идет с эхом (т.е. на каждый символ читаем эхо) – для исключения
переполнения. Также при приеме символов от МАП надо обратно послать эхом этот-же
символ.
Если нет посылки в течении 5с МАП считает, что компьютер отключили.
Все символами, Xi – цифры в шестнадцатиричном виде, все буквы заглавные:ABCDEF.
1) Чтение данных (по адресу a0a1a2 )
PCRDa0a1a2s0s1\r\n
и ждем ответа – читаем от МАП
МАП отвечает:
MOkd0d1s0s1\r\n (подтверждение чтения и возврат данных d0d1 по адресу a0a1a2)
или
MErd0d1s0s1\r\n (МАП прислал ошибку, с кодом ошибки d0d1)
2) Чтение страницы данных (по адресу a0a1a2 ) – размер страницы 16 байт
PCPRa0a1a2s0s1\r\n
и ждем ответа
MOkd0d1…16шт....d30d31s0s1\r\n (подтверждение чтения и возврат данных d0d1…d30d31
начиная с адреса a0a1a2)
или
MErd0d1s0s1\r\n (МАП прислал ошибку, с кодом ошибки d0d1)
3) Запись данных (по адресу a0a1a2 , данные d0d1, контрольная сумма s0s1)
PCWRa0a1a2d0d1s0s1\r\n
и ждем ответа
MOk\r\n (подтверждение записи)
или
MErd0d1s0s1\r\n (МАП прислал ошибку d0d1)
Контрольная сумма s - есть сумма по модулю 256 (т.е сумма в unsigned char игнорируя
переполнения) всех цифр адреса ai в кодах символов (S(‘0’)=0x30 и т.д.) и
непосредственно значение данных d0d1 как значение unsigned char и дополненная до 256.
(т.е например
PCWRa0a1a2d0d1s0s1\r\n : s0s1= (unsigned char)(255 – (S(a0)+S(a1)+S(a2)+d0d1))+1
или PCRDa0a1a2s0s1\r\n : s0s1=(unsigned char) (255 – (S(a0)+S(a1)+S(a2)))+1
или MOkd0d1s0s1\r\n : s0s1=(255 – d0d1)+1
или MOkd0d1…16шт....d30d31s0s1\r\n : s0s1=(255 – (d0d1+…+d30d31)+1
если теперь просуммировать все элементы по модулю 256 вместе с s0s1 – должен
получится 0 .
Пример – надо прочитать данные из EEPROM по адресу 0х59
1) Формируем посылку
PCRD059F2\r\n (s0s1= (unsigned char)(255 – (0+5+9))+1=242=0xF2)
Посылаем P читаем P
……
Посылаем \n читаем \n
2) Теперь читаем с МАП (допустим (что, скорее всего) МАП пришлет данные, а не
ошибку, т.е MOk7DEC\r\n , по адресу 0х59 в EEROM лежит EE_UAccNorm=125=0x7D)
Читаем M посылаем М
……….
Читаем \n посылаем \n
Download