jenya7 0 21 сентября, 2018 Опубликовано 21 сентября, 2018 (изменено) · Жалоба фигня какая то с этим КАНом. Прием на мастере и слейве одинаковый 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 - это ж просто праздник какой то. посылка прием - все в порядке. почему два камня не могут договориться между собой? Изменено 21 сентября, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 21 сентября, 2018 Опубликовано 21 сентября, 2018 · Жалоба Не, я понимаю, что читать спецификации не модно, если можно фигачить код и писать вопросы в интернетах... Но, всё-таки 1) чем вы руководствовались при запуске непрерывной передачи без малейших пауз? 2) слышали ли вы что-то о ACK'ах в кан-шине? И если да, то задумывались ли, кто же будет их выдавать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 сентября, 2018 Опубликовано 21 сентября, 2018 (изменено) · Жалоба Не, я понимаю, что читать спецификации не модно, если можно фигачить код и писать вопросы в интернетах... Но, всё-таки 1) чем вы руководствовались при запуске непрерывной передачи без малейших пауз? 2) слышали ли вы что-то о ACK'ах в кан-шине? И если да, то задумывались ли, кто же будет их выдавать? вобще то на вехнем уровне я жду ответа от слейва. а кроме того USB-CAN Plus молотит тоже без перерыва однако с ним все нормально. насчет ACK'а я не понял из документации. это же происходит на автоматическом уровне. и вообще можно без туманностей и напыщенности? а так по нашему по бразильски по человечески. я помню был проект. правда на TI Delfino. но там пять узлов молотили каждый как бог на душу положит без согласований и арбитражей. и ничего. все получали свои пакеты и я не помню чтоб КАН когда то отсох. Изменено 21 сентября, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 21 сентября, 2018 Опубликовано 21 сентября, 2018 · Жалоба а так по нашему по бразильски по человечески. По-человечески - возьмите осциллограф или хотя бы лог. анализатор типа клон Saleae Logic. Возмущений много, а схемы подключения - 0. Где анализ целостности сигналов? То что принял один - не значит, что примет другой! ФИЗИЧЕСКИ что на линии? -- UPD: Так еще и линия 1 Мбит! Откуда тактирование? Кварц или RC? Скорость пробовали уменьшать? с BTR регистром пробовали играться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 21 сентября, 2018 Опубликовано 21 сентября, 2018 (изменено) · Жалоба По-человечески - возьмите осциллограф или хотя бы лог. анализатор типа клон Saleae Logic. Возмущений много, а схемы подключения - 0. Где анализ целостности сигналов? То что принял один - не значит, что примет другой! ФИЗИЧЕСКИ что на линии? осциллограф показывает обычные пакеты. когда есть ошибки USB-CAN Plus сигнализирует. ну я вообще то вижу правильные данные при принятии. а что 1 Мбит это большая нагрузка на линию? тактирование внешний кварц. а BTR с ST примеров. они точно лучше меня знают как его выставлять. Изменено 21 сентября, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 28 сентября, 2018 Опубликовано 28 сентября, 2018 (изменено) · Жалоба ОК. вроде заработало. настраиваю маску на слейве 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; однако слейв не принимает. без маски и фильтра принимает. Изменено 28 сентября, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться