X

Здравствуйте, гость ( Вход | Регистрация )

Скрыть объявления

Объявления

9S12 Write/Read OBD, Чтение и запись процессора не вытаскивая его из машины  
1 из 3>»
 
Ответить
 RedYu
сообщение 8.4.2017, 12:44
Сообщение #244186


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Всем привет, случайно зашёл на ваш форум. Занимаюсь внедрением своего кода в процессор для дальнейшего его чтения и записи. Реализовал чтение из процессора через OBD разъём. Пытаюсь сделать запись внутрь процессора, не могу разобраться каким образом осуществляется запись в область EEPROM/D-FLASH. На данный момент могу только вычитать RAM, D-FLASH( or EEPROM), P-FLASH. Пересмотрел быстро(не вникая) даташиты на все подобные процессоры, не нашел правильного описания записи в область D-FLASH, написано что нужно разрешить через регистр запись, делаю всё как в нем описано но данные не переписываются. Больше всего не внимательно прочитал, но уже голову сломал над тем как нужно это реализовать, на данном процессоре.


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 12:49
Сообщение #244188


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

9S12 бывают разные, какой именно процессор у вас на испытании?
  Пользователя нет на форуме
 
 RedYu
сообщение 8.4.2017, 12:51
Сообщение #244190


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Цитата(Saveliy @ 8.4.2017, 12:49) *
9S12 бывают разные, какой именно процессор у вас на испытании?

Все что находятся в серии XE


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 12:52
Сообщение #244191


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

Вы подменяли на свой загрузчик?
  Пользователя нет на форуме
 
 RedYu
сообщение 8.4.2017, 12:58
Сообщение #244192


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Цитата(Saveliy @ 8.4.2017, 12:52) *
Вы подменяли на свой загрузчик?

Я отправляю процессору собственный код(как вы сказали, загрузчик) в котором реализованы собственные методы чтения и записи(не работает пока что). Вычитать из процессора могу что угодно, но записать не могу(пока что) :)


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 14:28
Сообщение #244195


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

Цитата(RedYu @ 8.4.2017, 12:44) *
Реализовал чтение из процессора через OBD разъём.

В том-то и фишка, что вычитать можно без особых плясок, а вот с записью всегда гимор)) это нормально

Цитата(RedYu @ 8.4.2017, 12:58) *
собственный код(как вы сказали, загрузчик)

Некоторые мысли по примеру ARM с имитацией еепром.. Для записи проц должен "спать", т.е. основная программа, а если "собственный код" не является загрузчиком, а например внедрен в оперативку, то полагаю, что прямая запись в режиме реального времени будет невозможна. Применить запись можно будет только на старте проца, но тогда физически должна быть уже записана в проц предпрограмма (замкнутый круг). Не видя некоторых примеров, сложно гадать, поэтому много вопросов. Вы как тестируете на запись, т.е. какими размерами блока пытаетесь производить единичную операцию записи? И еще, проверяли регистр записи после установки, он изменяется (устанавливается)?
  Пользователя нет на форуме
 
 RedYu
сообщение 8.4.2017, 15:46
Сообщение #244201


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Цитата(Saveliy @ 8.4.2017, 14:28) *
В том-то и фишка, что вычитать можно без особых плясок, а вот с записью всегда гимор)) это нормально
Некоторые мысли по примеру ARM с имитацией еепром.. Для записи проц должен "спать", т.е. основная программа, а если "собственный код" не является загрузчиком, а например внедрен в оперативку, то полагаю, что прямая запись в режиме реального времени будет невозможна. Применить запись можно будет только на старте проца, но тогда физически должна быть уже записана в проц предпрограмма (замкнутый круг). Не видя некоторых примеров, сложно гадать, поэтому много вопросов. Вы как тестируете на запись, т.е. какими размерами блока пытаетесь производить единичную операцию записи? И еще, проверяли регистр записи после установки, он изменяется (устанавливается)?

Для записи в P-FLASH так и должно быть, либо очистить указанную область памяти(страницу), и после чего записать в P-FLASH, (но запись этого участка памяти пока что не нужна, а лишь его чтение, а вот D-FLASH достаточно интересная область памяти в которой находятся различные данные по автомобилю и ЭБУ.
Запись делаю следующим образом:
CODE
LDY #$1234; Load value
LDX #$0800; Load address
STY 0,X; Write to address


При этом данные не переписываются, так же пробовал выставлять единицы в регистре EPROT.
Отредактированно RedYu - 8.4.2017, 15:46


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 18:34
Сообщение #244211


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

RedYu, это не совсем то. Я не вижу включение регистра, разрешающего запись, не вижу отключения прерываний на период записи, не вижу разблокировку записи, не вижу проверки на успешность записи и восстановление регистров.

Данный код выше не для еепром, т.к. отсутствуют настройки/процедуры для записи в еепром. Просто SET по адресу недостаточно.

CODE
LDY #$1234; Загружаем данные в регистр Y
LDX #$0800; Загружаем адрес в регистр X
STY 0,X;    Сохраняем значение регистра Y по адресу из регистра X


P.S.
Т.к. я не вижу более подробный кусок кода, возможно вам поможет отключение прерываний на время процедуры записи.
  Пользователя нет на форуме
 
 RedYu
сообщение 8.4.2017, 20:35
Сообщение #244214


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Преривания останавливаются командой SEI, разрешение на запись происходит в регистре EPROT, проверка осуществляется простым спопобом чтением из памяти.


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 RedYu
сообщение 8.4.2017, 20:43
Сообщение #244216


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Происходит все следующим образом:
- с компьютера указывается адрес, и передаются байтики
- ЭБУ получает данные и отвечает согласно запроса
- компьютер проверяет данные и в зависимости от результата отправляет данные повторно либо идёт дальше
- компьютер переводит ЭБУ в нормальное состояние


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 20:46
Сообщение #244217


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

RedYu,

Цитата(RedYu @ 8.4.2017, 20:35) *
Преривания останавливаются командой SEI, разрешение на запись происходит в регистре EPROT

Это все понятно, всегда кажется просто, а оно бац и не работает)) вопрос последовательности действий, зачастую ошибка проста, как два бублика.

Цитата(RedYu @ 8.4.2017, 20:35) *
проверка осуществляется простым спопобом чтением из памяти

Неверный подход, существую аппаратные операции, которые дают информацию о результатах. Если аппаратная проверка скажет, что запись прошла, но данные не изменились, это одно, а если скажет, что запись не прошла, это другое, то есть причины "незаписи" разные и надо искать проблему по правильному пути.

К примеру вырезка для другого контроллера:

CODE
BSF     EECON1,WREN        ; Enable write

BCF     INTCON,GIE         ; Disable INTs

MOVLW   55h                ; Unlock write
MOVWF   EECON2
MOVLW   0AAh
MOVWF   EECON2
BSF     EECON1,WR          ; Start the write

BTFSC   EECON1,WR          ; Запись завершена или нет?
GOTO    $-1                ; Если не завершена, то проверка производится снова.
                           ; Если завершена, то выход из "плавающей" задержки.

BCF     EECON1,WREN        ; Запретить запись
BSF     INTCON,GIE         ; Enable INTS
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 21:00
Сообщение #244218


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

Цитата(RedYu @ 8.4.2017, 20:43) *
- компьютер проверяет данные и в зависимости от результата отправляет данные повторно либо идёт дальше

Это софтовая операция, классический порядок действий, те же прерывания проца вы не можете остановить через компьютерный софт, мы ведь говорим о записи проца? Что делает комп, это пока неважно. Все действия, остановка/запуск прерываний, записи и чтения производятся в так называемом вашем внедренном "коде". О "правильности" этих последовательностях мы и стараемся понять, либо вобще, если таковое можно с данными камнями, не изменяя флэш. Я бы попробовал сам "на столе", проще было бы понять, почитав даташит, где собака зарыта, да нет времени пока, хотя интересно. По хорошему запись нужно отладить сначала на камне, прошив свою программу обычным проггером, а потом уже рабочий код вынести в "эксплоит" по OBD.
  Пользователя нет на форуме
 
 RedYu
сообщение 8.4.2017, 21:12
Сообщение #244220


Группа: Участник

Сообщений: 12
Спасибо сказали: 4 раза

Дело в том что на полной эмуляции этого процессора все работает хорошо, вижу где данные изменяются.
CODE
SEI;disable intr
MOVB #$FF,EPROT; enable write
LDD #$1234; load value
LDY #$0800; load address
STD 0,Y

После вот этих действий в теории должно быть записано число 0х1234 в самом начале Д-флеши, в эмуляторе оно записывается, в живом нет. Почему оно туда лезть не хочет? :)
Отредактированно RedYu - 8.4.2017, 21:13


--------------------
Telegram: @RedYu
http://rover.kulibin-auto.com/
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 21:22
Сообщение #244221


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

Цитата(RedYu @ 8.4.2017, 21:12) *
Но оно туда лезть не хочет:)

Оот падла! )))

Цитата(RedYu @ 8.4.2017, 21:12) *
Дело в том что на полной эмуляции этого процессора все работает хорошо

Ну так может все же проверить регистр аппаратной записи, что он скажет, мол прошла запись, а данных кукиш? И что значит эмуляции, это эмуляция работы программы на компе? Живой камень то есть для опытов на столе? Сто раз были ошибки, когда проверяешь работу через подобные проги PROTEUS, ISC08 и других, в зависимости от контроллеров, типа все хорошо, заливаешь в камень, кукиш.. Поэтому я давно больше не юзаю подобные проги, только на живом камне и через отладчик.
  Пользователя нет на форуме
 
 Saveliy
сообщение 8.4.2017, 21:25
Сообщение #244222


Special

Группа: Главные администраторы

Сообщений: 13256
Спасибо сказали: 2025 раз

Цитата(RedYu @ 8.4.2017, 21:12) *
в эмуляторе оно записывается, в живом нет

Уточнения принял. А при эмуляции основная флэш та же, что и внутри живого камня?
  Пользователя нет на форуме
 
1 из 3>»
Ответить
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
Режим отображения: ·


  Сейчас: 28.3.2024, 21:49