Jump to content
    

Изменение выхода в дампе pic18

Добрый день.

Имеется устройство на pic18. один из выводов на котором висит светодиод(их там 4 всего) был сожжен. Именно этот светодиод важен.

 Возможно ли в считанном дампе найти байт отвечающий за адрес вывода и заменить его на другой пин?

Глянул hex, естественно не нашел в нем имена выводов согласно даташиту(было бы странно если бы было так легко). спасибо.

 

Share this post


Link to post
Share on other sites

Если дамп не состоит из нулей. Заменить не достаточно.  Надо еще настроить .  и если он не занят альтернативной функцией. Като так  для начала .  

Share this post


Link to post
Share on other sites

18 hours ago, Snowmen10 said:

Добрый день.

Имеется устройство на pic18. один из выводов на котором висит светодиод(их там 4 всего) был сожжен. Именно этот светодиод важен.

 Возможно ли в считанном дампе найти байт отвечающий за адрес вывода и заменить его на другой пин?

Глянул hex, естественно не нашел в нем имена выводов согласно даташиту(было бы странно если бы было так легко). спасибо.

 

Возможно конечно.

Share this post


Link to post
Share on other sites

On 4/24/2025 at 8:37 PM, Snowmen10 said:

Глянул hex, естественно не нашел в нем имена выводов согласно даташиту

открыть в мплаб, там всё будет

 

image.thumb.png.628963135bcae07f454866bfee8f383a.png

Share this post


Link to post
Share on other sites

Добрый день. 

Пытаюсь освоить CAN адаптер  на pic18f25k80. битрейт нужен 33.3kbps в шине.

начал с малого - слушаем шину ловим пакет с нужным заголовком и мигаем светодиодом.

кварц внешний 16мгц

mplab  битрейт 33.3 предлагает но сообщает, что рассчитать параметры под него не может. и вручную в mcc выбрать для проверки разных комбинаций не дает.

окей. соглашаюсь с тем что есть

пишу минипрошивку. 

Из урока с сайта микрочип беру программу под данный контроллер.

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

if (CAN_receive(&rxMessage)) {
 if  (rxMessage.frame.id == 0x260) {
 
     LED_Toggle();
     __delay_ms(100);
     LED_Toggle();
     __delay_ms(100);
 }

т.е. сам адаптер в шину ничего не шлет.

компиллирую заливаю проверяю.

при подключении в авто- вешается шина авто.

 

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

у меня же шина вешается просто от прослушивания.

 

меняю битрейт на 20kbps - шина не вешается но и не читается ничего естественно.

меняю на 50kbps - шина вешается.

 

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

 

Share this post


Link to post
Share on other sites

10 минут назад, Snowmen10 сказал:

чем добиваться работоспособности? сторонними библиотеками? 

Калькулятором и даташитом.

Share this post


Link to post
Share on other sites

Ну да, это древнее семейство, там скорее всего тактовая частота кварца не делится как угодно, скорее всего кварцевый резонатор придётся менять.

Share this post


Link to post
Share on other sites

10 минут назад, A.V.Avtomat сказал:

Ну да, это древнее семейство, там скорее всего тактовая частота кварца не делится как угодно, скорее всего кварцевый резонатор придётся менять.

в том-то и прикол, что именно на данном железе именно с этим кварцем прошивка чужая шуршит стабильно в машине. шлет и получает пакеты на шине с 33.3kpbs.

я собираю прошивку и не работает и вешает шину.  заливаю обратно дамп чужой - работает всё.

 

хотя mcc сам предлагает вариант 33.3 но предупреждает, что не может на нем рассчитать прочие параметры шины.

 

есть еще одна шина в машине - 95kpbs. под нее вообще нет предложения от mcc.

в коде вижу как меняются данные строки при изменении битрейта и пдругих параметров шины:

BRGCON1 = 0x03;
    BRGCON2 = 0xA8;
    BRGCON3 = 0x01;

однако расшифровку и зависимость не вычислил, чтоб вручную вбить.

 

пошел далее. на stm32 с кантрансивером собрал тестер. он шлет пакет. pic должен получить его и мигнуть диодом. мигает. отлично. в ответ пик должен отправить свой пакет. стм32 его получает и в порт на терминал мне пишет ОК.

железки работают на 125kbps. т.е. с кодом проблем нет. все шуршит. обмен двухсторонний

 

и железо на чужой прошивке шуршит.

а я сконфигурировать не могу на нужную частоту.

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

в коде в файле *.c вообще те самые байты непереводимые.

В общем ищу как руками без всяких mcc сконфигурировать.

Edited by Snowmen10

Share this post


Link to post
Share on other sites

9 минут назад, Snowmen10 сказал:

BRGCON1 = 0x03;
BRGCON2 = 0xA8;
BRGCON3 = 0x01;

Какое содержимое генерит среда для этих регистров при скорости, на которой есть коннект с STM-кой?

1) Заданный бит-рейт;
2) Частота припаянного кварца.

Share this post


Link to post
Share on other sites

2 часа назад, Arlleex сказал:

Какое содержимое генерит среда для этих регистров при скорости, на которой есть коннект с STM-кой?

1) Заданный бит-рейт;
2) Частота припаянного кварца.

Baud rate: 125kbps
    System frequency: 16000000
    ECAN clock frequency: 16000000
    Time quanta: 8
    Sample point: 1-1-4-2
    Sample point: 75%
    */
    
    BRGCON1 = 0x07;
    BRGCON2 = 0x98;
    BRGCON3 = 0x01;

Share this post


Link to post
Share on other sites

BRGCON1 = 0xB;
BRGCON2 = 0xBF;
BRGCON3 
= 0x2;

Битрейт должен получиться 33333,33 кбит/с, семплпоинт 85%.

Share this post


Link to post
Share on other sites

15 hours ago, Snowmen10 said:

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

Машина... и 33.3333kb...  А случайно не пытаетесь обычным драйвером подключится к какому нибудь CAN-SW (GM) или CAN-FT?
А CAN прослушка - внатуре пассивная? Или всё же слушающе не передающая - но активная (ACK)?

В аттаче - давно забытый всеми софтварь некой очень известной канторы в некоторых кругах (Не Microchip).
Весьма наглядно, и общеобразовательно.

MBTime.zip

Share this post


Link to post
Share on other sites

41 минуту назад, girts сказал:

Машина... и 33.3333kb...  А случайно не пытаетесь обычным драйвером подключится к какому нибудь CAN-SW (GM) или CAN-FT?
А CAN прослушка - внатуре пассивная? Или всё же слушающе не передающая - но активная (ACK)?

В аттаче - давно забытый всеми софтварь некой очень известной канторы в некоторых кругах (Не Microchip).
Весьма наглядно, и общеобразовательно.

MBTime.zip 2.04 МБ · 0 загрузок

Раз шину вешает то 100% не пассивная.

Share this post


Link to post
Share on other sites

2 часа назад, girts сказал:

обычным драйвером

вы про железо или про софт?

как писал выше - эта железяка отлично работает на той же шине с другой прошивкой.

Могу лишь добавить, что это однопроводной gm-lan. т.е. canLow на выходе трансивера посажен на землю.

но опять же. железяка с другой прошивкой шуршит.

 

код стандартный у меня из учебника микрочипа.

на двухпроводной шине плата на стенде обменивается на стандартных скоростях(например 125) с другим адаптером на стм32. где судя по библиотеке, тоже никакого волшебства. Судя по "The basic idea to overclock part of the frame and to oversize the payload dates back to 1999.[2] Developed in 2011 and released in 2012 by Bosch,", у меня 100% не FD, а "классический" CAN.

вопрос лишь в ручном пересчете под нестандартные частоты, под которые mplab не способен посчитать параметры.

а потом, если рассчитаю, еще и в три строки с байтами перевести(выше они упоминались в комментариях). об этом вообще информацию не могу найти.

я про это вот

BRGCON1 = 0x07;
    BRGCON2 = 0x98;
    BRGCON3 = 0x01;

 

 

 

9 часов назад, Arlleex сказал:

Битрейт должен получиться 33333,33 кбит/с, семплпоинт 85%.

спасибо.

еще такое вот нашел.

"

Регистры для MCP2515
Oscilator Frequency 8.000 MHz
Target CAN Bus Baud Rate 33.333 kbps

Selected Options
BRP-1 (Baud Rate Prescaler) 4
Tq (Time Quanta) 1.250
Number of Time Quanta 24

Bit Timing Setup in Tq
Propagation Delay 7
Phase Segment 1 8
Phase Segment 2 8
Syncronization Jump Width (SJW) 1

Configuration Register Setup (MCP251X)
Register Binary Hexadecimal
CNF1/BRGCON1 b'00000100' 0x04
CNF2/BRGCON2 b'10111110' 0xBE
CNF3/BRGCON3 b'00000111' 0x07"

 

Буду пробовать.

Share this post


Link to post
Share on other sites

 

 

спасибо за наводки.

пытаюсь разобраться. 

Сгенерировав в mplab с десятка два комбинаций, вычислил где что прописывается.

BRGCON1: BRP - младший байт SJW - второй байт 

SJW пересчет
значение 1-3
в коде   0-8

BRGCON2: ps1 и  PropagationT 

ps1 соответствие второй байт BRGCON2 
значение  2-4-6-8
в код     8-9-A-B

пересчет PropagationT младший байт BRGCON2 
значение 1-2-3-4-5-6-7-8
 в код   8-9-a-b-c-d-e-f

BRGCON3: ps2
младший байт в коде = (значение-1)
значение 12
код     01

тут неясно по PS1. калькулятор выдает иногда значение 5. а как его ввести, если 4 это 9, а 6 это уже A. как между 9 и A вставить значение соответствующее 5??

 

 

воспользовался программой по ссылке выше и canCalkulator от Microelectronica

программы выдают разные параметры под один битрейт. в  canCalkulator видно, что это связано с разными допусками сэмплпоинт - она прям вариантов 20 сразу генерирует

 

поскольку на столе стенд из принимающе-передающей stm32, настроенной на 95кбпс и исправно на ней работающей с шиной в авто,

решил просчитать варианты под данный битрейт, чтоб ничего не перешивать не переделывать. ДЛЯ понимания правильности МОЕГО ПОНИМАНИЯ кодирования.

Имеем для 16мгц(кварц 4мгц и 4pll)\95кбпс
TQ17 BRP5  PS1-6 PS2-2 Prop-8
не работает
BRGCON1 = 0x05;  // sjw=1tq BRP 5
BRGCON2 = 0xAF; // PS1 6TQ PropagationT 8TQ 
BRGCON3 = 0x01;   // PS2  2TQ

TQ12 BRP-6  PS1-6 PS2-2 Prop-1
не работает
BRGCON1 = 0x06;  // sjw=1tq BRP 6
BRGCON2 = 0xA8; // PS1 6TQ PropagationT 1TQ 
BRGCON3 = 0x03;   // PS2  4TQ

TQ17 BRP-5  PS1-4 PS2-2 Prop-8
не работает
BRGCON1 = 0x05;  // sjw=1tq BRP 5
BRGCON2 = 0x9F; // PS1 4TQ PropagationT 8TQ 
BRGCON3 = 0x03;   // PS2  4TQ

TQ17 BRP-5  PS1-2 PS2-6 Prop-8
не работает
BRGCON1 = 0x05;  // sjw=1tq BRP 5
BRGCON2 = 0x8F; // PS1 2TQ PropagationT 8TQ 
BRGCON3 = 0x05;   // PS2  6TQ

 

ни один из вариантов не работает. 4 варианта это из калькуляторов предложения при заданных 16мгц\95кбпс

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...