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

cdc-acm + STM32

Столкнулся с проблемой, которую не удается победить.

 

Есть железка на STM32F103 на которой я запустил USB с CDC классом. Железка должна прикидываться COM портом и гонять данные, со скорость порядка 140 кбит/с. Судя по работе с Виндоус, она с этим справляется нормально. А вот с линуксом на ATSAM9G45 работает как-то не очень, обмен периодически зависает :-(

 

Ядро используется 3.18.48. Проанализировав работу cdc-acm.c в момент зависания, обнаружил, что заканчиваются urb на передачу, и функция int acm_tty_write вываливается с ошибкой, так как ей acm_wb_alloc возвращает -1. То есть, в один прекрасный момент, перестает вызываться USB стеком функция acm_write_bulk, освобождлающая эти urb.

 

Собственно, может кто подскажет, куда дальше нужно рыть?

 

Привожу лог USBmon'а:

 

c3a23500 261404154 C Bi:1:002:1 0 38 = 59aae335 5050c80f 132609b1 480480ac e19fc1ad 43401095 24ca361d 07f04700
c3a23500 261404192 S Bi:1:002:1 -115 128 <
c3a23400 261459717 S Bo:1:002:1 -115 64 = 84a96143 c4006cff 34fea4fb 4cff6401 a4f854fe ac0224fa 24fc2c02 24fc64fb
c3a23380 261459776 S Bo:1:002:1 -115 64 = 4800e4fa f4fc3401 340164f9 bcfe9c05 0cff64fc 7000dc03 d4fcecfe 54fea4fa
c3a23300 261459800 S Bo:1:002:1 -115 64 = 240164f9 58008cfe e4fa1c04 54fec4f5 5c04b400 c4f574fe 6c0344f8 8cfe6c03
c3a23280 261459821 S Bo:1:002:1 -115 64 = e4f99cfe 5cff24fc 1000ecfe 4c034c02 24fa4c03 a8ffa4fb 24fc64fc 4401b4fc
c3a23200 261459843 S Bo:1:002:1 -115 64 = dc05d4fd e4f91c04 1c06a4f8 14fd0c03 e4fb44f8 44f74c03 94fce4fa ecfed4fc
c3a23180 261459862 S Bo:1:002:1 -115 64 = 54fee4fa 74fdac01 8c021c04 4c020401 9c052c02 d4fcd4fd a400acfe d4fdac01
c3a23100 261459882 S Bo:1:002:1 -115 64 = c4f244f8 04e904e1 44f244f8 e4f9acfe 1c07bc08 bc073c0f 3c0c3c0f 3c0d5c07
c3a23080 261459901 S Bo:1:002:1 -115 64 = 44f7c4f6 c4f6c4f3 44f444f5 04eb04ec c4f404e5 04e544f1 c4f124fb 3c08bc0e
c3a23000 261459921 S Bo:1:002:1 -115 64 = 04ee04ec 04eb04ed 04eb04ef 64fca4fb 94fc1c05 5c066c02 bc0adc03 f8ffbc08
c39bff80 261459941 S Bo:1:002:1 -115 64 = 3c0dbc0d 3c0b1c07 3c0d3c0f 3c0abc0e bc0a3c09 3c0bdc04 1c063c09 1c06ec01
c39bff00 261459961 S Bo:1:002:1 -115 64 = 34013c0c fc103c0b bc083c08 bc093c0a fc143c0c 5000d8ff a4f92cff cc0114fe
c39bfe80 261459982 S Bo:1:002:1 -115 64 = 34fe64fc 3800bc08 bc07fc11 bc0b6c03 3c0a5c07 1c0464fc e4fa88ff 6cffc4f6
c39bfe00 261460003 S Bo:1:002:1 -115 64 = 14fd94fd 24f9b4fd 24fcc4f6 e4fb24f9 a4fa24fb 24fbf4fc f8ffb400 24fc64fb
c39bfd80 261460023 S Bo:1:002:1 -115 64 = 5c063c0c bc0c5c05 ac0174fe a0ff3401 44011cff 14fe44f8 c4f5bcfe dc041c06
c39bfd00 261460043 S Bo:1:002:1 -115 64 = 64fc64fc d4fcd4fc e4fae4fb 94fc24fb a4fbe4fa e4fa24fb 64fae4f9 24fa24fa
c39bfc80 261460064 S Bo:1:002:1 -115 64 = acfeccfe bcfe2cff 0cffdcfe 0cffacfe 34fe34fe f4fdb4fd d4fdb4fd 94fdd4fd
c39bfc00 261460084 S Bo:1:002:1 -115 64 = ccfefcfe 1cffccfe fcfefcfe dcfedcfe 1cffbcfe acfe5cff 54febcfe 7cff14fe
c39bfb80 261460104 S Bo:1:002:1 -115 64 = dcfe34fe dcfebcfe 54febcfe 9cfe74fe 9cfe9cfe 8cfeacfe acfeacfe 9cfebcfe
c39bfb00 261460124 S Bo:1:002:1 -115 64 = bcfebcfe 9cfebcfe bcfe9cfe bcfebcfe 9cfebcfe ccfe9cfe ccfebcfe 8cfebcfe
c3a23400 261460157 C Bo:1:002:1 0 64 >
c3a23380 261460179 C Bo:1:002:1 0 64 >
c3a23300 261460186 C Bo:1:002:1 0 64 >
c3a23280 261460192 C Bo:1:002:1 0 64 >
c3a23400 261460220 S Bo:1:002:1 -115 64 = 8cfe54fe 7cff74fe 74fe2cff 8cfe54fe ecfeacfe 34fefcfe bcfe74fe 1cffacfe
c3a23380 261460244 S Bo:1:002:1 -115 4 = 8cfe9cfe
c3a23200 261461173 C Bo:1:002:1 0 64 >
c3a23180 261461188 C Bo:1:002:1 0 64 >
c3a23100 261461195 C Bo:1:002:1 0 64 >
c3a23080 261461201 C Bo:1:002:1 0 64 >
c3a23000 261461208 C Bo:1:002:1 0 64 >
c39bff80 261461214 C Bo:1:002:1 0 64 >
c39bff00 261461221 C Bo:1:002:1 0 64 >
c39bfe80 261461228 C Bo:1:002:1 0 64 >
c39bfe00 261461235 C Bo:1:002:1 0 64 >
c39bfd80 261461242 C Bo:1:002:1 0 64 >
c39bfd00 261461249 C Bo:1:002:1 0 64 >
c39bfc80 261461256 C Bo:1:002:1 0 64 >
c39bfc00 261461263 C Bo:1:002:1 0 64 >
c39bfb80 261462147 C Bo:1:002:1 0 64 >
c39bfb00 261462155 C Bo:1:002:1 0 64 >
c3a23400 261462161 C Bo:1:002:1 0 64 >
c3a23380 261462168 C Bo:1:002:1 0 4 >
c3a23480 261483153 C Bi:1:002:1 0 38 = 27d58b80 a6346866 47a19e42 94224988 31a76883 c399324e 8d4d50af d262ba06
c3a23480 261483192 S Bi:1:002:1 -115 128 <
c3a23400 261535926 S Bo:1:002:1 -115 64 = 84a96143 9cfe74fe 8cfe8cfe 8cfe8cfe 9cfe9cfe acfeacfe 8cfeacfe acfe8cfe
c3a23380 261535984 S Bo:1:002:1 -115 64 = 74fe74fe 8cfe9cfe acfe74fe ccfeacfe 34fe1cff 54fef4fd 6cfff4fd 14fea0ff
c3a23300 261536008 S Bo:1:002:1 -115 64 = ccfefcfe 54fe8cfe 74fe54fe 54fe8cfe acfe74fe dcfeccfe 9cfefcfe 74fe8cfe
c3a23280 261536029 S Bo:1:002:1 -115 64 = 74febcfe bcfe74fe 54fefcfe ccfe74fe acfe8cfe ecfe74fe 8cfeecfe 74fe9cfe
c3a23200 261536049 S Bo:1:002:1 -115 64 = 34fd14fe e8ff74fd bcfe0cff 9cfe0cff 5cff1cff 34fea0ff 74fe14fe 1cff14fe
c3a23180 261536068 S Bo:1:002:1 -115 64 = 8cfe14fe f4fd54fe 54fe54fe dcfe2cff 8cfe2cff 1cff94fd 54febcfe 94fdacfe
c3a23100 261536088 S Bo:1:002:1 -115 64 = 9cfe2800 fcfeacfe ecfeb4fd 54fe54fd 54fd74fe b4fdf4fd b4fcd4fc 3cff4cff
c3a23080 261536107 S Bo:1:002:1 -115 64 = 0cffdcfe b4fc54fe 74fdacfe 74fef4fd 74fe34fe 04017cff 6cff2cff acfec0ff
c3a23000 261536128 S Bo:1:002:1 -115 64 = b0ff94fd 5cff64fc c4f754fd bcfe24fb 94006401 f4fd2c02 7cff24fb 34fd24fa
c3a23400 261536163 C Bo:1:002:1 0 64 >
c3a23380 261536183 C Bo:1:002:1 0 64 >
c3a23400 261536213 S Bo:1:002:1 -115 64 = 64fc24fa 44f7c4f7 44f8c4f5 c4f764f9 c4f644f4 44f204ed 04e8c4f5 9c03bc0c
c3a23380 261536238 S Bo:1:002:1 -115 64 = 94fcacfe 8c025c05 bc089c05 64fbc4f2 04ec04e9 44f7bc0e fc1bfc1b fc129c06
c39bff80 261536258 S Bo:1:002:1 -115 64 = d4fd1000 a4fb44f8 34fda4fb 64fcf400 a4fba4f9 e4f9e4f8 a4fbb4fc 44f504ee
c39bff00 261536278 S Bo:1:002:1 -115 64 = bcfe9400 54fed4fd 64fb5cff bc083c0a 080004ef 04e604e4 04eb04ef 04e9c4f7
c39bfe80 261536298 S Bo:1:002:1 -115 64 = fc1afc15 fc1bfc11 4c02c4f4 c4f1c4f5 44f2c4f3 44f724f9 44f8a4f8 94fc5cff
c39bfe00 261536319 S Bo:1:002:1 -115 64 = a4fa64fc 00000c02 c0ff9c03 fc119c06 f4003c0a bc09dc06 ac028c02 ec02dc06
c39bfd80 261536339 S Bo:1:002:1 -115 64 = 04ec04ed 04ec04ee 24f9c400 dc03dc04 9c06fc0f fc103c0b 3c093c0b bc0a1c04
c39bfd00 261536360 S Bo:1:002:1 -115 64 = fc0fbc0c 3c0bbc0b bc091c07 fcfe74fe 04e904f0 2c0304e4 04ecd4fd a4fba4fb
c39bfc80 261536381 S Bo:1:002:1 -115 64 = 14fd94fc 2c02bc08 3c0a3c08 64fb04ef 44f8a4f9 04e484df 04ef04ef 04ea04ec
c39bfc00 261536400 S Bo:1:002:1 -115 64 = 04ef04ef 44f444f4 c4f2c4f5 14fdac01 7401ec02 bc083c0c 3c0abc07 3c083c09
c39bfb80 261536420 S Bo:1:002:1 -115 64 = 3c0d3c0d 1c068c02 3c0cbc08 b4fdd4fd 0c03ac02 a4fae4fa 30002c02 b40054fd
c39bfb00 261536440 S Bo:1:002:1 -115 4 = 5cff0000
c3a23300 261537171 C Bo:1:002:1 0 64 >
c3a23280 261537186 C Bo:1:002:1 0 64 >
c3a23200 261537194 C Bo:1:002:1 0 64 >
c3a23180 261537200 C Bo:1:002:1 0 64 >
c3a23100 261537207 C Bo:1:002:1 0 64 >
c3a23080 261537214 C Bo:1:002:1 0 64 >
c3a23000 261537221 C Bo:1:002:1 0 64 >
c3a23400 261537228 C Bo:1:002:1 0 64 >
c3a23380 261537235 C Bo:1:002:1 0 64 >
c39bff80 261537242 C Bo:1:002:1 0 64 >
c39bff00 261537249 C Bo:1:002:1 0 64 >
c39bfe80 261537256 C Bo:1:002:1 0 64 >
c39bfe00 261538150 C Bo:1:002:1 0 64 >
c39bfd80 261538159 C Bo:1:002:1 0 64 >
c39bfd00 261538165 C Bo:1:002:1 0 64 >
c39bfc80 261538172 C Bo:1:002:1 0 64 >
c39bfc00 261538178 C Bo:1:002:1 0 64 >
c39bfb80 261538185 C Bo:1:002:1 0 64 >
c39bfb00 261538192 C Bo:1:002:1 0 4 >
c3a23c00 261562166 C Bi:1:002:1 0 38 = 5a291b9b 2286e0e6 b4113070 d2320764 a17b1187 28261609 a54ea86e 56f14f26
c3a23c00 261562205 S Bi:1:002:1 -115 128 <
c3a23400 261635892 S Bo:1:002:1 -115 64 = 84a96143 1c05fc0f fc11bc0b bc0cfc11 bc0e1c06 cc018c01 8cfe44f8 c4f2c4f3
c3a23380 261635951 S Bo:1:002:1 -115 64 = 40003000 64fa24fa 04f0c4f1 f0ff04ed c4f09cfe e4fb64fb 74fddc05 1c061c05
c3a23300 261635976 S Bo:1:002:1 -115 64 = ec011c05 5c073c08 9c0344f4 c4f34c03 44f204e2 44f2c4f6 04ef04ed c4f3b4fd
c3a23280 261635998 S Bo:1:002:1 -115 64 = 24fac4f7 c4f4c4f6 64fa64fb e4fa94fc 44014c03 cc014c02 5c045c04 4c021000
c3a23200 261636019 S Bo:1:002:1 -115 64 = 5cfff4fc 3cff5800 14fe7000 c40034fe e0ffe400 8cfeacfe f0ff74fe ecfea8ff
c3a23180 261636040 S Bo:1:002:1 -115 64 = 34fe74fd 34fe34fe d4fd54fd 94fd74fd 54fd94fd 54fd94fd f4fd74fe 74fe9cfe
c3a23100 261636059 S Bo:1:002:1 -115 64 = 8cfefcfe 34fd14fe 2cffb4fc 14fea0ff f4fc54fe d0ff14fd 34fe98ff d4fcf4fd
c3a23080 261636079 S Bo:1:002:1 -115 64 = 54fedcfe 3cff74fe 0cff3cff 74fe9cfe ccfe34fe 54fe8cfe 54fe74fe 9cfe74fe
c3a23000 261636100 S Bo:1:002:1 -115 64 = dcfe74fe 8cfeacfe 54fe8cfe acfe54fe 54fe8cfe 74fe8cfe acfe74fe acfeecfe
c39bff80 261636119 S Bo:1:002:1 -115 64 = 4cffdcfe 34fd3cff 0cff34fe 14fe54fe 44f7a4fa 5c0594fc 54fe9c04 b0fffcfe
c3a23400 261636156 C Bo:1:002:1 0 64 >
c3a23380 261636176 C Bo:1:002:1 0 64 >
c3a23400 261636203 S Bo:1:002:1 -115 64 = f4fd14fe 44f854fd 300024fa d4000c03 f8ff6800 50008cfe ec018cfe a4fb2800
c3a23380 261636230 S Bo:1:002:1 -115 64 = f400ccfe b4fd4800 d4fd34fd c400d4fc 94fc0401 b4fde4fb 9400dcfe 64fc3800
c39bff00 261636251 S Bo:1:002:1 -115 64 = 64fca4fb 24fce4fa e4fa64fb 64fa24fa 24faa4f9 e4f8a4f8 44f8c4f7 44f744f8
c39bfe80 261636273 S Bo:1:002:1 -115 64 = bc073c09 bc08bc08 dc06bc07 1c071c06 dc058c02 b8ff14fd 44f6c4f2 c4f2c4f5
c39bfe00 261636294 S Bo:1:002:1 -115 64 = a4faec01 3c08bc07 5c059c04 9c03f400 f4fd24fb a4f9a4f8 c4f7c4f7 44f744f7
c39bfd80 261636315 S Bo:1:002:1 -115 64 = fc11fc18 fc19fc13 bc0b3c0d 3c0d1c05 6cff0cff 0c02ccfe a4fb4401 cc02f400
c39bfd00 261636335 S Bo:1:002:1 -115 64 = 7cffec02 3c0a3c08 0c026c03 dc066c03 64fce4fb 8cfe24fb c4f5c4f7 a4f944f7
c39bfc80 261636355 S Bo:1:002:1 -115 64 = 0cff4800 c0ffe0ff 44f544f4 bc07c4f5 04eeac01 ac02a4f9 c4f6dc06 bc0724fa
c39bfc00 261636375 S Bo:1:002:1 -115 64 = 4c028c02 64fa04f0 ccfee4fb 04e904ee 44f844f7 04ed04ef 8cfee4fb c4f7f4fc
c39bfb80 261636395 S Bo:1:002:1 -115 64 = c4f7c4f7 e4fba4fb 64fa74fe 74fe0000 8c01d4fd f0ff8400 d4fd3000 e400e8ff
c39bfb00 261636414 S Bo:1:002:1 -115 4 = dc03cc01
c3a23300 261637170 C Bo:1:002:1 0 64 >
c3a23280 261637205 C Bo:1:002:1 0 64 >
c3a23200 261637213 C Bo:1:002:1 0 64 >
c3a23180 261637220 C Bo:1:002:1 0 64 >
c3a23100 261637227 C Bo:1:002:1 0 64 >
c3a23080 261637233 C Bo:1:002:1 0 64 >
c3a23000 261637240 C Bo:1:002:1 0 64 >
c39bff80 261637247 C Bo:1:002:1 0 64 >
c3a23400 261637254 C Bo:1:002:1 0 64 >
c3a23380 261637261 C Bo:1:002:1 0 64 >
c39bff00 261637267 C Bo:1:002:1 0 64 >
c39bfe80 261637274 C Bo:1:002:1 0 64 >
c39bfe00 261638160 C Bo:1:002:1 0 64 >
c39bfd80 261638193 C Bo:1:002:1 0 64 >
c39bfd00 261638201 C Bo:1:002:1 0 64 >
c39bfc80 261638209 C Bo:1:002:1 0 64 >
c39bfc00 261638216 C Bo:1:002:1 0 64 >
c39bfb80 261638223 C Bo:1:002:1 0 64 >
c39bfb00 261638230 C Bo:1:002:1 0 4 >
c3a23b80 261641157 C Bi:1:002:1 0 38 = 8c74084b 260be7aa 7d6fa5ab 2d02451b cc123f8d b4093690 fa2fe07b 3b7e6136
c3a23b80 261641181 S Bi:1:002:1 -115 128 <
c3a23400 261719827 S Bo:1:002:1 -115 64 = 84a96143 94fc04ec 04eaa4fa cc0244f7 44f5e4f9 a4fabcfe d4fdfcfe ecfeac02
c3a23380 261719895 S Bo:1:002:1 -115 64 = 24fce4fa 24fae4f9 a4f9a4f9 64faa4fa e4fa64fb 64fba4fb 64fce4fb 64fc34fd
c3a23300 261719920 S Bo:1:002:1 -115 64 = 54fe1800 e4fb54fe 1cff64fc 14fe7cff d4fc14fe 0800d4fc ccfee8ff f4fc7cff
c3a23280 261719942 S Bo:1:002:1 -115 64 = 54feecfe 9cfe54fe bcfe74fe 74fe74fe 74fe54fe 54fe8cfe 54fe9cfe ccfe74fe
c3a23200 261719963 S Bo:1:002:1 -115 64 = 9cfe74fe 74fe74fe 34feacfe 74fe34fe dcfe9cfe 74fe74fe 1cff54fe d4fd4000
c3a23180 261719982 S Bo:1:002:1 -115 64 = 3cffe8ff 94fc2800 fcfef4fc 6800f4fd d4fda8ff f4fd74fe dcfe9cfe 74febcfe
c3a23100 261720002 S Bo:1:002:1 -115 64 = 54fedcfe bcfe34fe 0cff9cfe 54fe0cff 74fe74fe dcfe74fe acfedcfe acfedcfe
c3a23080 261720022 S Bo:1:002:1 -115 64 = bcfe34fe acfe3cff 74fdccfe c0ff24fc e0ff88ff e4fb4401 74feb4fc 640194fd
c3a23000 261720041 S Bo:1:002:1 -115 64 = 90ff94fd fcfe0cff 34fe9cfe 0cff74fe 34fe3cff 34fe34fe 4cfff4fd 74fe3cff
c39bff80 261720061 S Bo:1:002:1 -115 64 = dcfeacfe 8cfebcfe acfebcfe bcfeacfe bcfeccfe acfe9cfe bcfeacfe acfe9cfe
c39bff00 261720081 S Bo:1:002:1 -115 64 = 9cfed4fc 9400f4fd 74fd9400 74fd14fe 080094fd 34feb0ff d4fdf4fd f8fff4fd
c39bfe80 261720101 S Bo:1:002:1 -115 64 = 1cfff4fd 9cfe2cff d4fdccfe 0cff14fe fcfeecfe 34fedcfe dcfe54fe ccfedcfe
c39bfe00 261720121 S Bo:1:002:1 -115 64 = 54fedcfe 74fe8cfe bcfe9cfe 74feecfe acfe34fe 4cff54fe 54fe88ff 14fe8cfe
c3a23b00 261720159 C Bi:1:002:1 0 38 = 824a8c0d 0212bcfb 64e0b4b4 d1367908 9dd2529f ab3f1689 0a841987 42d81f16
c3a23b00 261720184 S Bi:1:002:1 -115 128 <
c3a23400 261720200 C Bo:1:002:1 0 64 >
c3a23400 261720233 S Bo:1:002:1 -115 64 = 34fe34fe 0cff74fe 14fe2cff 9cfef4fd 6cff74fe 14fe7cff f4fd54fe 4cfff4fd
c39bfd80 261720258 S Bo:1:002:1 -115 64 = 54feccfe acfe34fe ecfe54fe 74febcfe 8cfe54fe bcfeccfe 14fefcfe 8cfe14fe
c39bfd00 261720279 S Bo:1:002:1 -115 64 = 74feccfe 74febcfe ecfe34fe 2cff9cfe 54fe4cff 54fe74fe 0cff54fe 54feecfe
c39bfc80 261720301 S Bo:1:002:1 -115 64 = 14fe0cff dcfef4fd 2cffacfe 14fe1cff 9cfe34fe 0cff74fe 14fe2cff 54fe34fe
c39bfc00 261720321 S Bo:1:002:1 -115 64 = 8cfeccfe 8cfe9cfe dcfe54fe acfeccfe 34fedcfe acfe34fe ecfe9cfe 54fedcfe
c39bfb80 261720341 S Bo:1:002:1 -115 64 = b8ff74fd 74fd74fd 14fdb4fd f4fc64fc 24fba4fa a4f904ee 04ecc4f6 44f8c4f6
c39bfb00 261720361 S Bo:1:002:1 -115 64 = a4003c0e 3c0f7c20 7c247c24 fc196c03 bc0b6cff 04ecc4f5 5c063c0b 9c058c01
c39bfa80 261720381 S Bo:1:002:1 -115 4 = f4fcc4f6
c39bfa00 261789706 S Bo:1:002:1 -115 64 = 84a96143 f4fcdc04 bc085c05 bc09bc0e 3c0cbc09 ac02cc01 dc034cff a4fa44f6
c39bf980 261789765 S Bo:1:002:1 -115 64 = 44f88c02 3c09bc0e bc0ebc0a bc08bc08 9c05ccfe 14fd2cff e4fb44f6 44f3c4f3
c39bf900 261789792 S Bo:1:002:1 -115 64 = b8ff7800 c4f7f8ff 1c04ac01 3c09ec02 a8ff5c06 3c09dc03 94fc5c04 dc066cff
c39bf880 261789814 S Bo:1:002:1 -115 64 = 24f9c4f5 b4fc5c07 3c0efc14 fc10bc0b fc11fc12 3c0994fc 24fbf4fc 44f604f0
c39bf800 261789835 S Bo:1:002:1 -115 64 = a4f9c4f5 44f3c4f4 c4f7a4f8 24f924fc 04ede4fa bc0e24fa e4f83c09 bc0edc04
c39bf780 261789856 S Bo:1:002:1 -115 64 = 3c0b4401 cc023c0a 3c0e3c0a 44f604e4 04e2c4f1 04e984d1 84dfc4f4 64f9c4f5
c39bf700 261789877 S Bo:1:002:1 -115 64 = a4f844f8 64fa8c02 bc0a3c0b bc083c0a bc0c3c0a 1c0434fe e4fb24fb 44f744f2
c39bf680 261789898 S Bo:1:002:1 -115 64 = 8c0224fb a4fa8400 5401dc05 240134fe 5c06bc07 2c03f8ff 1c05bc07 ec02cc01
c39bf600 261789918 S Bo:1:002:1 -115 64 = 44f544f5 44f80c03 bc0efc10 3c0f3c0e fc11fc12 bc084cff b4fc24fc 44f604ef
c39bf580 261789939 S Bo:1:002:1 -115 64 = 24f9c4f4 44f4c4f5 44f7c4f7 64f974fd ec016c02 1c045c05 1c06dc05 44f224fb
c39bf500 261789960 S Bo:1:002:1 -115 64 = ec015c04 9c037cff c8ffdc04 cc028c01 2401ac02 3c0a3c09 bc070401 04f004ea
c39bf480 261789981 S Bo:1:002:1 -115 64 = 98ff74fd 24fb44f5 c4f004ef 44f3c4f6 c4f5e4f8 60001c05 9c061c07 bc083c0b
c3a23a80 261800155 C Bi:1:002:1 0 38 = e0bc4133 f2d39312 50748d49 16ebae13 79b875b4 ab724a01 38f9b64c ca6c07a8
c3a23a80 261800194 S Bi:1:002:1 -115 128 <

[ВСЕ, ЗДЕСЬ ВСЕ ЗАКАНЧИВАЕТСЯ]

 

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


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

Про работу стека в STM32F103 - если у Вас нет данных для передачи в хост, выполняете ли посылку нулевой длины? На некоторых версиях windows нарушение не проходит даром. Возможно и тут аналогично.

Объяснение "на мой глаз" такое - неответивший несколько раз ендпоинт переводится хостом в список "заблокированных" и его перестают спрашивать.

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

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


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

Про работу стека в STM32F103 - если у Вас нет данных для передачи в хост, выполняете ли посылку нулевой длины? На некоторых версиях windows нарушение не проходит даром. Возможно и тут аналогично.

Объяснение "на мой глаз" такое - неответивший несколько раз ендпоинт переводится хостом в список "заблокированных" и его перестают спрашивать.

 

 

Не понял про windows? С Windows на обычном PC, железка на STM32 нормально общается, без зависонов. Проблема в общении с хостом на ATSAM9G45. Посылок нулевой длины я не шлю, и вроде как никакого обмена на шине нет (если верить USBMon'у) в покое. Зависает строго под нагрузкой, то есть когда появляется активный двухсторонний обмен. И то не всегда, иногда все исправно работает в течение продолжительного времени.

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


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

Я windows упомянул, потому что некоторые версии плюют на неотвечающий device, некоторые требуют соблюдения правил. плюет ли ваша версия Linux, вам виднее.

 

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


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

Вы лучше вместо этой ереси показали бы, что в dmesg после подключения устройства, и что выдает udevadm monitor.

Наверняка endpoint криво сконфигурирован, но дырявые мастдайские дрова на это плюют, а в линухе требуется точное соответствие.

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


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

Вы лучше вместо этой ереси показали бы, что в dmesg после подключения устройства, и что выдает udevadm monitor.

Наверняка endpoint криво сконфигурирован, но дырявые мастдайские дрова на это плюют, а в линухе требуется точное соответствие.

 

dmesg
....
b 1-2: new full-speed USB device number 3 using at91_ohci
cdc_acm 1-2:1.0: This device cannot do calls on its own. It is not a modem.
cdc_acm 1-2:1.0: ttyACM1: USB ACM device

 

 

lsusb -v          

Bus 001 Device 003: ID 0483:5740 STMicroelectronics STM32F407
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0483 STMicroelectronics
  idProduct          0x5740 STM32F407
  bcdDevice            2.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           67
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              0 
      CDC Header:
        bcdCDC               1.10
      CDC Call Management:
        bmCapabilities       0x00
        bDataInterface          1
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      CDC Union:
        bMasterInterface        0
        bSlaveInterface         1 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval              16
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            9 Hub
  bDeviceSubClass         0 Unused
  bDeviceProtocol         0 Full speed (or root) hub
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0001 1.1 root hub
  bcdDevice            3.18
  iManufacturer           3 
  iProduct                2 
  iSerial                 1 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           25
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0002  1x 2 bytes
        bInterval             255

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


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

А, понятно: у вас вместо линукса какая-нибудь бубунта. И идиотский systemd запускает modemd при обнаружении /dev/ttyACM1. В результате устройство блокируется, и работать с ним невозможно.

Ну что, поздравляю... Проблему можно решить черезжопно, оставив бубунту вместо линукса, либо по-человечески, установив дистрибутив, в котором нет systemd.

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


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

Насколько я помню, systemd тут не при чём, такое было и в убунтах без systemd.

Выходов два:

  1. Снести пакет modemmanager;
  2. Прописать правило udev. Для этого надо создать файл /etc/udev/rules.d/99-ttyacms.rules следующего содержания:

    ATTRS{idVendor}=="0ca6" ATTRS{idProduct}=="a050", ENV{ID_MM_DEVICE_IGNORE}="1"

    (Вместо 0ca6 и a050 подставить свои VID и PID). После создания этого файла надо скомандовать

    sudo udevadm control --reload-rules

 

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


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

А, понятно: у вас вместо линукса какая-нибудь бубунта. И идиотский systemd запускает modemd при обнаружении /dev/ttyACM1. В результате устройство блокируется, и работать с ним невозможно.

Ну что, поздравляю... Проблему можно решить черезжопно, оставив бубунту вместо линукса, либо по-человечески, установив дистрибутив, в котором нет systemd.

 

У меня ядро скачано с kernel.org и собрано собственаручно, с правкой board файла. А rootfs собран buildroot'ом.

 

Я что-то не понял, а вы как определили что с устройством невозможно работать?

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


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

В добавок могу сказать, что обмен зависает только в сторону от хоста. К хосту от STM32 данные доходят нормально.

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


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

Можно ли подправить дескрипторы, вместо того, чтобы править udev? Чтобы Ubuntu видела USB COM порт, но не слала AT команды.

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


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

На вашем устройстве возможно запустить usbmon и tcpdump?

 

Проблема все-таки была в железке на STM32. Конечная точка почему-то сваливалась в состояние NAK (NAK: the endpoint is naked and all reception requests result in a NAK handshake.) Немного переработал свой код, работающий с USB стеком STM'а, и зависоны исчезли.

 

 

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


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

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

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

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

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

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

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

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

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

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