This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC3235SF:多个引脚上的未记录引脚多路复用默认配置

Guru**** 2563960 points
Other Parts Discussed in Thread: CC3235SF

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1045481/launchxl-cc3235sf-undocumented-pinmux-default-configuration-on-several-pins

器件型号:LAUNCHXL-CC3235SF
主题中讨论的其他器件:CC3235SF

您好!

CC3235SF 的技术参考手册的表16-11显示了引脚配置寄存器列表、表16-12介绍了每个寄存器值的数据格式。 但是,当将开发套件板重置为默认演示应用程序,然后刷写打印表16-11中每个寄存器内容的自定义应用程序时,我注意到,有几个引脚确实具有用于引脚复用编码*或驱动强度**的未记录配置值 (请参阅下面的代码)。 是否有人能解释他们的功能?

*与数据表的表7-2中列出的值进行比较。
**与参考手册清单的表16-12相比

此外、引脚29和30还有配置寄存器、根据数据表的表7-2将这些寄存器设置为接地、因此配置没有太大意义、对吧?

// pin03 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin07 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin08 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin11 function: 01  open-drain: 0  driver: 128mA  pull-up: 0  pull-down: 1  out-override: 0  out-buffer: 0  < undocumented driver strength 0b100
// pin12 function: 01  open-drain: 0  driver: 128mA  pull-up: 0  pull-down: 1  out-override: 0  out-buffer: 0  < undocumented driver strength 0b100
// pin14 function: 01  open-drain: 0  driver: 128mA  pull-up: 0  pull-down: 0  out-override: 0  out-buffer: 0  < undocumented driver strength 0b100
// pin18 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin19 function: 02  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 0  out-buffer: 0  < undocumented function!
// pin20 function: 02  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 0  out-buffer: 0  < undocumented function!
// pin21 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 0  out-buffer: 1  < undocumented function!
// pin29 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < GND?!?
// pin30 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < GND?!?
// pin45 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin50 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin52 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!
// pin53 function: 01  open-drain: 0  driver: 6mA  pull-up: 0  pull-down: 0  out-override: 1  out-buffer: 1  < undocumented function!

/// Addresses of pad configuration registers for application pins.
enum class pad_config_register : uint32_t {
  pin_1 = 0x4402e0c8,
  pin_2 = 0x4402e0cc,
  pin_3 = 0x4402e0d0,
  pin_4 = 0x4402e0d4,
  pin_5 = 0x4402e0d8,
  pin_6 = 0x4402e0dc,
  pin_7 = 0x4402e0e0,
  pin_8 = 0x4402e0e4,
  pin_11 = 0x4402e0e8,
  pin_12 = 0x4402e0ec,
  pin_13 = 0x4402e0f0,
  pin_14 = 0x4402e0f4,
  pin_15 = 0x4402e0f8,
  pin_16 = 0x4402e0fc,
  pin_17 = 0x4402e100,
  pin_18 = 0x4402e140,
  pin_19 = 0x4402e110,
  pin_20 = 0x4402e114,
  pin_21 = 0x4402e104,
  pin_29 = 0x4402e108,
  pin_30 = 0x4402e10c,
  pin_45 = 0x4402e11c,
  pin_50 = 0x4402e0a0,
  pin_52 = 0x4402e120,
  pin_53 = 0x4402e118,
  pin_55 = 0x4402e0a4,
  pin_57 = 0x4402e0a8,
  pin_58 = 0x4402e0ac,
  pin_59 = 0x4402e0b0,
  pin_60 = 0x4402e0b4,
  pin_61 = 0x4402e0b8,
  pin_62 = 0x4402e0bc,
  pin_63 = 0x4402e0c0,
  pin_64 = 0x4402e0c4,
};

...

	void print_pin(uint32_t number, pad_config_register pad)
	{
		auto config = pinmux_get(pad);
		uint32_t driver;
		switch (config & (7 << 5)) {
		case pinmux_output_driver_6mA:
			driver = 6;
			break;
		case pinmux_output_driver_4mA:
			driver = 4;
			break;
		case pinmux_output_driver_2mA:
			driver = 2;
			break;
		case pinmux_output_driver_disabled:
			driver = 0;
			break;
		default:
			driver = config & (7 << 5);
			break;
		}
		printk("pin%02u function: %02u  open-drain: %u  driver: %umA  pull-up: %u  "
		       "pull-down: %u  out-override: %u  out-buffer: %u\n",
		       number, config & 0x0F, (config >> 4) & 1, driver, (config >> 8) & 1,
		       (config >> 9) & 1, (config >> 10) & 1, (config >> 11) & 1);
	}
	
	...
	
  print_pin(1, pad_config_register::pin_1);
  print_pin(2, pad_config_register::pin_2);
  print_pin(3, pad_config_register::pin_3);
  print_pin(4, pad_config_register::pin_4);
  print_pin(5, pad_config_register::pin_5);
  print_pin(6, pad_config_register::pin_6);
  print_pin(7, pad_config_register::pin_7);
  print_pin(8, pad_config_register::pin_8);
  print_pin(11, pad_config_register::pin_11);
  print_pin(12, pad_config_register::pin_12);
  print_pin(13, pad_config_register::pin_13);
  print_pin(14, pad_config_register::pin_14);
  print_pin(15, pad_config_register::pin_15);
  print_pin(16, pad_config_register::pin_16);
  print_pin(17, pad_config_register::pin_17);
  print_pin(18, pad_config_register::pin_18);
  print_pin(19, pad_config_register::pin_19);
  print_pin(20, pad_config_register::pin_20);
  print_pin(21, pad_config_register::pin_21);
  print_pin(29, pad_config_register::pin_29);
  print_pin(30, pad_config_register::pin_30);
  print_pin(45, pad_config_register::pin_45);
  print_pin(50, pad_config_register::pin_50);
  print_pin(52, pad_config_register::pin_52);
  print_pin(53, pad_config_register::pin_53);
  print_pin(55, pad_config_register::pin_55);
  print_pin(57, pad_config_register::pin_57);
  print_pin(58, pad_config_register::pin_58);
  print_pin(59, pad_config_register::pin_59);
  print_pin(60, pad_config_register::pin_60);
  print_pin(61, pad_config_register::pin_61);
  print_pin(62, pad_config_register::pin_62);
  print_pin(63, pad_config_register::pin_63);
  print_pin(64, pad_config_register::pin_64);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    GPIO 29和30已接地(由于内部问题)、无法在 CC3235中使用。

    其他引脚设置(表中未提及)将 被 syscfg 配置(初始化代码)覆盖。 syscfg 设置基于数据表表中的值。

    您可以忽略默认值。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提供有关引脚29和30的粗略信息。

    但是、您的回答并不能真正回答我的第一个问题。 虽然我意识到文档中说"应用程序代码必须配置 I/O。" 在代码执行之前、仍不完全清楚焊盘处于什么状态、因为它们处于未记录状态(即从我的角度来看处于未定义状态)。 我不想忽略未定义的行为。

    实际上、它看起来比这稍微复杂一些。 当我通过 USB 闪存 CC3235SF 芯片时、LaunchXL 开发套件似乎没有完全复位它。 在拔下 USB 线缆之前、所有的引脚配置值都将被保留。 根据这一结论、该电路板上的演示应用(当我按下复位按钮时刷新的应用)会主动设置这些未指定的值。

    那么、再说一次、上面未定义值的函数是什么?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、应用程序确实设置了特定值。

    很遗憾、我没有您要查找的信息。  收集此信息需要一些时间。

    如果您使用 TI 驱动程序和软件、则这些值不会出现问题。