Перейти к содержанию
    

фигня какая то с этим КАНом.

Прием на мастере и слейве одинаковый

void USB_LP_CAN1_RX0_IRQHandler(void)
{
     can_params.message_received = 1;
     can_params.fifo_num = CAN_FIFO0;
   
      CAN_Receive(CANx, CAN_FIFO0, &RxMessage);
}

посылка тоже

uint8_t CAN_TX(uint8_t mot_id, uint8_t opcode, uint8_t *data, uint32_t data_size)
{
     uint8_t mailbox_num;
     
     TxMessage.RTR = CAN_RTR_DATA;
     TxMessage.IDE = CAN_ID_EXT;  
     TxMessage.ExtId = (opcode << 8) | mot_id;
     
     if (data_size > 8)
         data_size = 8;
     
     TxMessage.DLC = data_size;
     memcpy(&TxMessage.Data[0], data, data_size);
     mailbox_num = CAN_Transmit(CANx, &TxMessage);
     
     return mailbox_num;
}

мастер посылает

void main (void)
{    while(1)    
      {    
          CAN_TX(100, MASTER_COM_WHO_IS, can_data_buf, 0);
      }
}

я вижу четкий прием

void CAN_TX_Slave(uint32_t opcode)
{    
          switch (opcode)    
     {          
             //я сюда попадаю
             case CAN_COM_WHO_IS :
                 size = 0;        
                             //посылка ответа
                  CAN_TX(motor_sys_params.mot_id, CAN_COM_I_AM, data, 0);
             break;
     }
}

но мастер в прерывание приема не заходит. я ставлю паузу на мастере - и тогда он заходит в прерывание приема.

это что мастер должен освободить шину чтоб получить ответ?

 

в какой то момент на слейве вдруг TEC = 0xFF REC = 0xFF и он отсыхает несмотря на то что CAN1->BTR |= CAN_BTR_SILM;

 

Подключил слейв к USB-CAN Plus - это ж просто праздник какой то. посылка прием - все в порядке. почему два камня не могут договориться между собой?

post-71075-1537517870_thumb.png

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, я понимаю, что читать спецификации не модно, если можно фигачить код и писать вопросы в интернетах...

 

Но, всё-таки

1) чем вы руководствовались при запуске непрерывной передачи без малейших пауз?

2) слышали ли вы что-то о ACK'ах в кан-шине? И если да, то задумывались ли, кто же будет их выдавать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не, я понимаю, что читать спецификации не модно, если можно фигачить код и писать вопросы в интернетах...

 

Но, всё-таки

1) чем вы руководствовались при запуске непрерывной передачи без малейших пауз?

2) слышали ли вы что-то о ACK'ах в кан-шине? И если да, то задумывались ли, кто же будет их выдавать?

 

вобще то на вехнем уровне я жду ответа от слейва. а кроме того USB-CAN Plus молотит тоже без перерыва однако с ним все нормально.

насчет ACK'а я не понял из документации. это же происходит на автоматическом уровне.

 

и вообще можно без туманностей и напыщенности? а так по нашему по бразильски по человечески.

 

я помню был проект. правда на TI Delfino. но там пять узлов молотили каждый как бог на душу положит без согласований и арбитражей. и ничего. все получали свои пакеты и я не помню чтоб КАН когда то отсох.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а так по нашему по бразильски по человечески.

По-человечески - возьмите осциллограф или хотя бы лог. анализатор типа клон Saleae Logic.

Возмущений много, а схемы подключения - 0.

Где анализ целостности сигналов?

 

То что принял один - не значит, что примет другой!

 

ФИЗИЧЕСКИ что на линии?

 

--

UPD: Так еще и линия 1 Мбит!

Откуда тактирование? Кварц или RC?

Скорость пробовали уменьшать?

с BTR регистром пробовали играться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По-человечески - возьмите осциллограф или хотя бы лог. анализатор типа клон Saleae Logic.

Возмущений много, а схемы подключения - 0.

Где анализ целостности сигналов?

 

То что принял один - не значит, что примет другой!

 

ФИЗИЧЕСКИ что на линии?

 

осциллограф показывает обычные пакеты. когда есть ошибки USB-CAN Plus сигнализирует.

 

ну я вообще то вижу правильные данные при принятии. а что 1 Мбит это большая нагрузка на линию?

 

тактирование внешний кварц. а BTR с ST примеров. они точно лучше меня знают как его выставлять.

post-71075-1537540001_thumb.png

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ОК. вроде заработало.

 

настраиваю маску на слейве

    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0064;     
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x00FF; 
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

мастер посылает

TxMessage.ExtId = (opcode << 8) | 0х64;

однако слейв не принимает. без маски и фильтра принимает.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...