Виж темите без отговор | Виж активните теми
Дата и час: Пет Апр 19, 2024 3:16 am
Автор |
Съобщение |
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Безумен проблем
От два дни си блъскам главата с много странен проблем, който не съм виждал никога преди... Имам един PIK32MZ който е закачен към TMC5160A през SPI и се опитвам да подкарам степъра. Намерих някаква библиотека в гита: https://github.com/terjeio/Trinamic-libraryЗначи проблема: при първоначалната инициализация, степъра си отговаря и всичко си минава нормално когато трасирам кода, обаче ако го пусна директно, не отговаря изобщо. Няма никакви тайминги дето да играят роля, а самите SPI функции се ползват и на други места и си работят нормално. Не ми идва наум какво би могло да бъде... Ето как изглежда функцията дето чете: | | | | Код: uint8_t xchgTMC5160(uint16_t reg, uint8_t *data) { nSS1 = 0; reg = xchgSPI(SYSTEM_SPI, (uint8_t) reg); data[3] = xchgSPI(SYSTEM_SPI, data[3]); data[2] = xchgSPI(SYSTEM_SPI, data[2]); data[1] = xchgSPI(SYSTEM_SPI, data[1]); data[0] = xchgSPI(SYSTEM_SPI, data[0]); nSS1 = 1; return reg; }
// interface helper function for the TMC5160 API TMC_spi_status_t tmc_spi_read (trinamic_motor_t driver, TMC_spi_datagram_t *datagram) { openSPI(SYSTEM_SPI, 3, 8, 3000000); datagram->addr.write = 0; datagram->payload.value = 0; xchgTMC5160(datagram->addr.value, (uint8_t *) (uint8_t *) &datagram->payload.value); uSec(5); // a very short delay here TMC_spi_status_t s = (TMC_spi_status_t) xchgTMC5160(datagram->addr.value, (uint8_t *) &datagram->payload.data); openSPI(SYSTEM_SPI, 0, 0, 0); return s; }
| | | | |
Това с пращането на празния байт е точно според примерния код на автора на библиотеката
_________________ 'просто' е технически синоним на 'красиво'
|
Вто Яну 11, 2022 4:09 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
това ми се е случвало - с дебъгер работи, директно не ... ама нямам спомени ...
чекни алигмент и пакетиране на структурите trinamic_motor_t driver туй нещо цяла структура ли е или пойнтер
_________________ main[-1u]={1};
|
Вто Яну 11, 2022 4:26 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Безумен проблем
Структура е: https://github.com/terjeio/Trinamic-lib ... r/tmchal.hИначе основната купчина структури е доста по-сложна: https://github.com/terjeio/Trinamic-lib ... /tmc5160.hДобра идея, ще прегледам за подравняване, макар че нищо не съм специфицирал ръчно...
_________________ 'просто' е технически синоним на 'красиво'
|
Вто Яну 11, 2022 4:38 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
TMC_spi_status_t tmc_spi_read ( trinamic_motor_t driver, TMC_spi_datagram_t *datagram) ми изглежда подозрителен параметър "пуш" ... макар че не се използва и бих използвал UART printf("1....2....3") заместител на дебъгера за проверка къде точно се омазва в "директен режим"
_________________ main[-1u]={1};
|
Вто Яну 11, 2022 4:53 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
TMC_spi_datagram_t има четно/нечетно (подозрително) подравняване от масив към структура (армовете могат някой неща дето пиковете не могат) чесно клазано в момента много много не мисля - просто "гледам" дали има нещо "подозрително" пробвай с принтф
_________________ main[-1u]={1};
|
Вто Яну 11, 2022 5:01 pm |
|
|
bobihot
Ранг: Форумен бог
Регистриран на: Сря Фев 13, 2013 2:35 pm Мнения: 1748
|
Re: Безумен проблем
-Интересно предположение. пробвай void *cs_pin да го преместиш първи, или да добавиш uint8_t хх пред него?
|
Сря Яну 12, 2022 2:04 am |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Безумен проблем
Значи, проблемът сис сигурност е в пакетирането! Махнах прагмата в tmc5160.h и тогава инициализацията минава, но с грешни резултати. Разместване на trinamic_motor_t структурата не помага за съжаление...
_________________ 'просто' е технически синоним на 'красиво'
|
Сря Яну 12, 2022 11:38 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
дам ... те бай дефол са алигнати ( ако не са пакет ) тъпо, но локализира: къде... без дебъгер тогава принт дъмп параметри printf("blah %p\n", datagram) printf("blah %p\n", datagram->addr) ... да го еа и те така, що така реално "проблема" ти прави trap_isr( wait forever ) там може да printf dump reg ... къде, какво, как от de-asm
_________________ main[-1u]={1};
|
Сря Яну 12, 2022 12:12 pm |
|
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 12:48 pm Мнения: 4406 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
Re: Безумен проблем
Един въорос, опитвал ли си да говориш със съпорта? Не е гаражна компания , би трябвало да ти отговорят.... То Тринамик, ги купиха Максим, оък максим пожелага да ги куоят Аналог....
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
Сря Яну 12, 2022 12:20 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
не мога да анализарам кода ти, но навярно имаш некъв масив данни от които използваш директно struct с нечетно отместване ( това в някой случай минава на ARM, но на PIC не ... а явно кода е тестван с ARM )
навярно...
_________________ main[-1u]={1};
|
Сря Яну 12, 2022 12:29 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Безумен проблем
Добрите стари принтове са в употреба от десетилетия Но в тоя случай почти не помагат... Ето малко моднат код с принтове: | | | | Код: uint8_t xchgTMC5160(uint16_t reg, uint8_t *data) { nSS1 = 0;
printf("datagram: 0x%p [%02X]: %02X, %02X, %02X, %02X", data, (int) reg, (int) data[3], (int) data[2], (int) data[1], (int) data[0]); //###
reg = xchgSPI(SYSTEM_SPI, (uint8_t) reg); // getting the status byte here data[3] = xchgSPI(SYSTEM_SPI, data[3]); data[2] = xchgSPI(SYSTEM_SPI, data[2]); data[1] = xchgSPI(SYSTEM_SPI, data[1]); data[0] = xchgSPI(SYSTEM_SPI, data[0]);
printf(" --> [%02X]: %02X, %02X, %02X, %02X\r\n", (int) reg, (int) data[3], (int) data[2], (int) data[1], (int) data[0]); //###
nSS1 = 1; return reg; }
// interface helper function for the TMC5160 API TMC_spi_status_t tmc_spi_write (trinamic_motor_t driver, TMC_spi_datagram_t *datagram) { openSPI(SYSTEM_SPI, 3, 8, 3000000); datagram->addr.write = 1; uint8_t v[4]; memcpy(v, datagram->payload.data, 4); TMC_spi_status_t s = (TMC_spi_status_t) xchgTMC5160(datagram->addr.value, v); openSPI(SYSTEM_SPI, 0, 0, 0); return s; }
// interface helper function for the TMC5160 API TMC_spi_status_t tmc_spi_read (trinamic_motor_t driver, TMC_spi_datagram_t *datagram) { openSPI(SYSTEM_SPI, 3, 8, 3000000); datagram->addr.write = 0; memset(datagram->payload.data, 0, 4); xchgTMC5160(datagram->addr.value, datagram->payload.data); uSec(5); // a very short delay here TMC_spi_status_t s = (TMC_spi_status_t) xchgTMC5160(datagram->addr.value, datagram->payload.data); openSPI(SYSTEM_SPI, 0, 0, 0); return s; }
| | | | |
Навсякъде където зависи от моя код тук избягвам обръщения към по-големи от байт данни. Ако нещо се случва в библиотеките, там вече не зависи от мен... Ето резултатите: 1. В трейс (без брейкпоинтс, цялото изпълнение минава и приключва успешно): | | | | Код: datagram: 0x0x8007ff6f [6F]: 00, 00, 00, 00 --> [00]: 00, 00, 00, 00 datagram: 0x0x8007ff6f [6F]: 00, 00, 00, 00 --> [F9]: 80, 08, 00, 00 datagram: 0x0x8007ff2e [01]: 00, 00, 00, 00 --> [F9]: 80, 08, 00, 00 datagram: 0x0x8007ff2e [01]: 80, 08, 00, 00 --> [F9]: 00, 00, 00, 05 datagram: 0x0x8007fed8 [80]: 00, 00, 00, 04 --> [F9]: 00, 00, 00, 05 datagram: 0x0x8007fed8 [EC]: 16, 00, 81, 35 --> [F9]: 00, 00, 00, 04 datagram: 0x0x8007fed8 [ED]: 00, 00, 22, 05 --> [F9]: 16, 00, 81, 35 datagram: 0x0x8007fed8 [F0]: C8, 0D, 0E, 24 --> [F9]: 00, 00, 22, 05 datagram: 0x0x8007fed8 [91]: 00, 00, 00, 80 --> [F9]: C8, 0D, 0E, 24 datagram: 0x0x8007fed8 [93]: 00, 00, 00, 00 --> [F9]: 00, 00, 00, 80 datagram: 0x0x8007feb8 [8B]: 00, 00, 00, 85 --> [F9]: 00, 00, 00, 00 datagram: 0x0x8007fed8 [90]: 00, 06, 09, 04 --> [F9]: 00, 00, 00, 85 datagram: 0x0x8007ff74 [6C]: 00, 00, 00, 00 --> [F9]: 00, 06, 09, 04 datagram: 0x0x8007ff74 [6C]: 00, 06, 09, 04 --> [F9]: 16, 00, 81, 35
| | | | |
2. Наливам същия код във флаша и пускам: | | | | Код: datagram: 0x0x8007ff6f [6F]: 00, 00, 00, 00 --> [FF]: FF, FF, FF, FF datagram: 0x0x8007ff6f [6F]: FF, FF, FF, FF --> [FF]: FF, FF, FF, FF
| | | | |
Ето това е което се изпълнява на по-високо ниво:
_________________ 'просто' е технически синоним на 'красиво'
|
Сря Яну 12, 2022 12:48 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
xchgSPI() ... DMA ( кеш/некеш ? ) или baremetal в TX/RX рег принтни и xchgSPI
_________________ main[-1u]={1};
|
Сря Яну 12, 2022 1:18 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Безумен проблем
_________________ 'просто' е технически синоним на 'красиво'
|
Сря Яну 12, 2022 1:21 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4715
|
Re: Безумен проблем
[6F]: 00, 00, 00, 00 или не предава --> [FF]: FF, FF, FF, FF или не чете ... на пръв поглед това се вижда провери( printf ) драйвер фунk на SPI
_________________ main[-1u]={1};
|
Сря Яну 12, 2022 1:25 pm |
|
|
Н'бабане Гт'муан'га
Ранг: Форумен бог
Регистриран на: Сря Яну 25, 2012 8:14 am Мнения: 4616 Местоположение: Новата земя на племето Мутум'ба
|
Re: Безумен проблем
Проверих го с принтове.Каквото е на екрана това минава през SPI бъса
_________________ 'просто' е технически синоним на 'красиво'
|
Сря Яну 12, 2022 1:35 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|