Помощник
Здравствуйте, гость ( Вход | Регистрация )
1 из 3»
|
Ответить |
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/ |
|
|
8.4.2017, 12:49
Сообщение
#244188
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
9S12 бывают разные, какой именно процессор у вас на испытании?
|
|
|
8.4.2017, 12:51
Сообщение
#244190
|
|
Группа: Участник Сообщений: 12 Спасибо сказали: 4 раза |
9S12 бывают разные, какой именно процессор у вас на испытании? Все что находятся в серии XE -------------------- Telegram: @RedYu
http://rover.kulibin-auto.com/ |
|
|
8.4.2017, 12:52
Сообщение
#244191
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
Вы подменяли на свой загрузчик?
|
|
|
8.4.2017, 12:58
Сообщение
#244192
|
|
Группа: Участник Сообщений: 12 Спасибо сказали: 4 раза |
Вы подменяли на свой загрузчик? Я отправляю процессору собственный код(как вы сказали, загрузчик) в котором реализованы собственные методы чтения и записи(не работает пока что). Вычитать из процессора могу что угодно, но записать не могу(пока что) :) -------------------- Telegram: @RedYu
http://rover.kulibin-auto.com/ |
|
|
8.4.2017, 14:28
Сообщение
#244195
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
Реализовал чтение из процессора через OBD разъём. В том-то и фишка, что вычитать можно без особых плясок, а вот с записью всегда гимор)) это нормально собственный код(как вы сказали, загрузчик) Некоторые мысли по примеру ARM с имитацией еепром.. Для записи проц должен "спать", т.е. основная программа, а если "собственный код" не является загрузчиком, а например внедрен в оперативку, то полагаю, что прямая запись в режиме реального времени будет невозможна. Применить запись можно будет только на старте проца, но тогда физически должна быть уже записана в проц предпрограмма (замкнутый круг). Не видя некоторых примеров, сложно гадать, поэтому много вопросов. Вы как тестируете на запись, т.е. какими размерами блока пытаетесь производить единичную операцию записи? И еще, проверяли регистр записи после установки, он изменяется (устанавливается)? |
|
|
8.4.2017, 15:46
Сообщение
#244201
|
|
Группа: Участник Сообщений: 12 Спасибо сказали: 4 раза |
В том-то и фишка, что вычитать можно без особых плясок, а вот с записью всегда гимор)) это нормально Некоторые мысли по примеру 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/ |
|
|
8.4.2017, 18:34
Сообщение
#244211
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
RedYu, это не совсем то. Я не вижу включение регистра, разрешающего запись, не вижу отключения прерываний на период записи, не вижу разблокировку записи, не вижу проверки на успешность записи и восстановление регистров.
Данный код выше не для еепром, т.к. отсутствуют настройки/процедуры для записи в еепром. Просто SET по адресу недостаточно. CODE LDY #$1234; Загружаем данные в регистр Y LDX #$0800; Загружаем адрес в регистр X STY 0,X; Сохраняем значение регистра Y по адресу из регистра X P.S. Т.к. я не вижу более подробный кусок кода, возможно вам поможет отключение прерываний на время процедуры записи. |
|
|
8.4.2017, 20:35
Сообщение
#244214
|
|
Группа: Участник Сообщений: 12 Спасибо сказали: 4 раза |
Преривания останавливаются командой SEI, разрешение на запись происходит в регистре EPROT, проверка осуществляется простым спопобом чтением из памяти.
-------------------- Telegram: @RedYu
http://rover.kulibin-auto.com/ |
|
|
8.4.2017, 20:43
Сообщение
#244216
|
|
Группа: Участник Сообщений: 12 Спасибо сказали: 4 раза |
Происходит все следующим образом:
- с компьютера указывается адрес, и передаются байтики - ЭБУ получает данные и отвечает согласно запроса - компьютер проверяет данные и в зависимости от результата отправляет данные повторно либо идёт дальше - компьютер переводит ЭБУ в нормальное состояние -------------------- Telegram: @RedYu
http://rover.kulibin-auto.com/ |
|
|
8.4.2017, 20:46
Сообщение
#244217
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
RedYu,
Преривания останавливаются командой SEI, разрешение на запись происходит в регистре EPROT Это все понятно, всегда кажется просто, а оно бац и не работает)) вопрос последовательности действий, зачастую ошибка проста, как два бублика. проверка осуществляется простым спопобом чтением из памяти Неверный подход, существую аппаратные операции, которые дают информацию о результатах. Если аппаратная проверка скажет, что запись прошла, но данные не изменились, это одно, а если скажет, что запись не прошла, это другое, то есть причины "незаписи" разные и надо искать проблему по правильному пути. К примеру вырезка для другого контроллера: 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 |
|
|
8.4.2017, 21:00
Сообщение
#244218
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
- компьютер проверяет данные и в зависимости от результата отправляет данные повторно либо идёт дальше Это софтовая операция, классический порядок действий, те же прерывания проца вы не можете остановить через компьютерный софт, мы ведь говорим о записи проца? Что делает комп, это пока неважно. Все действия, остановка/запуск прерываний, записи и чтения производятся в так называемом вашем внедренном "коде". О "правильности" этих последовательностях мы и стараемся понять, либо вобще, если таковое можно с данными камнями, не изменяя флэш. Я бы попробовал сам "на столе", проще было бы понять, почитав даташит, где собака зарыта, да нет времени пока, хотя интересно. По хорошему запись нужно отладить сначала на камне, прошив свою программу обычным проггером, а потом уже рабочий код вынести в "эксплоит" по OBD. |
|
|
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/ |
|
|
8.4.2017, 21:22
Сообщение
#244221
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
Но оно туда лезть не хочет:) Оот падла! ))) Дело в том что на полной эмуляции этого процессора все работает хорошо Ну так может все же проверить регистр аппаратной записи, что он скажет, мол прошла запись, а данных кукиш? И что значит эмуляции, это эмуляция работы программы на компе? Живой камень то есть для опытов на столе? Сто раз были ошибки, когда проверяешь работу через подобные проги PROTEUS, ISC08 и других, в зависимости от контроллеров, типа все хорошо, заливаешь в камень, кукиш.. Поэтому я давно больше не юзаю подобные проги, только на живом камне и через отладчик. |
|
|
8.4.2017, 21:25
Сообщение
#244222
|
|
Special Группа: Главные администраторы Сообщений: 13274 Спасибо сказали: 2041 раз |
в эмуляторе оно записывается, в живом нет Уточнения принял. А при эмуляции основная флэш та же, что и внутри живого камня? |
|
|
1 из 3»
|
Ответить |
|
16.11.2024, 16:02 Посл. ответ от Mohammed Fadhil |
||
|
3.1.2024, 5:58 Посл. ответ от Александр |
||
|
25.7.2022, 7:21 Посл. ответ от Fedorov |
||
|
16.3.2022, 12:28 Посл. ответ от Saveliy |
||
|
22.3.2015, 3:08 Посл. ответ от Saveliy |
|
Сегодня, 6:09 Посл. ответ от mihnokuzia |
||
|
Вчера, 19:50 Посл. ответ от Василий88 |
||
|
22.11.2024, 22:53 Посл. ответ от Reanimotor |
||
|
22.11.2024, 11:00 Посл. ответ от Aнвар |
||
|
19.11.2024, 18:43 Посл. ответ от slalex |
Сейчас: 25.11.2024, 15:54 |