unicore-mx icon indicating copy to clipboard operation
unicore-mx copied to clipboard

STM32 Family USB OTG FS/HS have varying number of endpoints

Open kuldeepdhaka opened this issue 7 years ago • 1 comments

STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx
		dedicated RAM of 1.25[FS] Kbytes

		Up to 8[FS] host channels (pipes)

		1 bidirectional control endpoint0
		3[FS] IN endpoints
		3[FS] OUT endpoints
F105
F107

STM32F205xx, STM32F207xx, STM32F215xx and STM32F217xx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 8[FS] / 12[HS] host channels (pipes)

		1 bidirectional control endpoint0
		3[FS] / 5[HS] IN endpoints
		3[FS] / 5[HS] OUT endpoints
F205
F207
F215
F217

STM32F40xxx, STM32F41xxx, STM32F42xxx, STM32F43xxx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 8[FS] / 12[HS] host channels (pipes)


		1 bidirectional control endpoint 0
		3[FS] / 5[HS] IN endpoints
		3[FS] / 5[HS] OUT endpoints
F401
F405
F407
F411
F412
F412
F413
F415
F417
F423
F427
F429
F429
F437
F439

STM32F446xx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 12[FS] / 16[HS] host channels (pipes)

		1 bidirectional control endpoint0
		5[FS] / 7[HS] IN endpoints
		5[FS] / 7[HS] OUT endpoints
F446

STM32F469xx and STM32F479xx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 12[FS] / 16[HS] host channels (pipes)

		1 bidirectional control endpoint0
		5[FS] / 8[HS] IN endpoints
		5[FS] / 8[HS] OUT endpoints
F469
F469
F479

STM32F72xxx and STM32F73xxx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 12[FS] / 16[HS] host channels (pipes)

		1 bidirectional control endpoint0
		5[FS] / 8[HS] IN endpoints
		5[FS] / 8[HS] OUT endpoints
F722
F723
F732
F733

STM32F75xxx and STM32F74xxx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 12[FS] / 16[HS] host channels (pipes)

		1 bidirectional control endpoint0
		5[FS] / 8[HS] IN endpoints
		5[FS] / 8[HS] OUT endpoints
F745
F745
F746
F746
F756

STM32F76xxx and STM32F77xxx
		dedicated RAM of 1.25[FS] / 4[HS] Kbytes

		Up to 12[FS] / 16[HS] host channels (pipes)

		1 bidirectional control endpoint0
		5[FS] / 8[HS] IN endpoints
		5[FS] / 8[HS] OUT endpoints
F765
F767
F769
F777
F779

STM32H7x3
		dedicated RAM of 4 [HS] Kbytes

		Up to 16 [HS] host channels (pipes)

		1 bidirectional control endpoint0
		8[HS] IN endpoints
		8[HS] OUT endpoints
H743
H753

STM32L4x5 and STM32L4x6
		dedicated RAM of 1.25 [FS] Kbytes

		Up to 12 [FS] host channels (pipes)

		1 bidirectional control endpoint0
		5[FS] IN endpoints
		5[FS] OUT endpoints
L475
L476
L476
L486
L486
L496
L4A6
L4A6

In code, we need to consider the varying number of endpoints count.

DEVICE: Currently the values in code (endpoints including ep0) are hard coded to 6[FS] / 9 [HS] These values fit most target, but some target have different numbers.

HOST: Currently the values in code are hard coded to 8[FS] / 12 [HS] These values fit most target, but some target have different numbers.

Reference: https://github.com/libopencm3/libopencm3/issues/811

Note: Data based on all STM32 microcontrollers family datasheet with USB OTG FS/HS produced by ST (1 August 2017)

Note: Added Host mode data too.

kuldeepdhaka avatar Aug 01 '17 17:08 kuldeepdhaka

Conclusion

	f1: dev=3[fs] , host=8[fs]
	
	f2: dev=3[fs]/5[hs], host=8[fs]/12[hs]
	
	f4:
		F446: dev=5[fs]/7[hs], host=12[fs]/16[hs]
		F469 / F469 / F479: dev=5[fs]/8[hs], host=12[fs]/16[hs]
		else: dev=3[fs]/5[hs], host=8[fs]/12[hs]
		
	f7: dev=5[fs]/8[hs], host=12[fs]/16[hs]
	
	h7: dev=8[hs], host=16[hs]
	
	l4: dev=5[fs], host=12[fs]

Note: dev do not include ep0

kuldeepdhaka avatar Aug 01 '17 17:08 kuldeepdhaka