13918210822 发表于 2023-12-1 11:41:22

IO模拟一种2线接口(类似I2C, 但略有不同),请问一个细节如何实现为好


使用STC32F12K54
操作一种类似MDIO/MDC的接口,读写一种交换机芯片的寄存器。类似I2C但有细微差异,因此不能直接用I2C, 用GPIO模拟 CLK 和 双向DATA
问题是,在读时序中, 有个周期要切换输出为高阻输入,然后外部设备回发1个0和多位数据, 建议的CLK为200ns, 即5M时钟。
请问如何设置IO配置,特别是如何切换IO的输入输出模式,能够更好的符合建议的时钟频率和时序

时序图如下:



13918210822 发表于 2023-12-4 20:08:01

实际测试,GPIO输出CLK, 可以稳定工作在2.5MHz左右(56M主频, WTST = 1; 如56M, WTST=0, IRC驱动,芯片无法工作)
        P4M0 &= ~0x20; P4M1 &= ~0x20;//P4.5设置准双向口
        /*P4PU &= ~0x20;*/ P4NCS &= ~0x20; /*P4IE |= 0x20;*/
        P4SR &= ~0x20;
//        P4DR &= ~0x20;
        P45 = 1;
SETSMCK:
        P45 ^= 1;
        _nop_(); //取消NOP, GPIO 输出CLK频率约在3MHz
//        _nop_();
//        _nop_();
//        _nop_();
        goto SETSMCK;

神农鼎 发表于 2023-12-5 07:45:06

将I/O设置为 【开漏模式】,打开内部上拉电阻 | 或外部加上拉电阻
===【开漏工作模式】,对外设置输出为1,等同于 【高阻输入】
===【开漏工作模式】,【打开内部上拉电阻 | 或外部加上拉电阻】,简单等同于 【准双向口】








13918210822 发表于 2023-12-5 13:02:44

请问为何56M主时钟,2倍指令时长(WTST = 1),GPIO的速率却只有2~3M, 这个速率是受什么制约造成的?

13918210822 发表于 2023-12-12 09:46:57

请问
1.ICache的大小是多大,能否知道特定程序是否进入了ICache
2.有没有方式让程序加载到SRAM(edata)中去运行, 从而跑到更高的速率?
我想通过一些优化, 让GPIO的翻转速率更高 > 5Mbps(目前是3Mbps)

神农鼎 发表于 2023-12-12 11:10:18

STC32F12K54建议最高主频跑 52MHz 以下
STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1;
时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz

13918210822 发表于 2023-12-12 16:58:32

神农鼎 发表于 2023-12-12 11:10
STC32F12K54建议最高主频跑 52MHz 以下

这个回答没有回答任何提问, 兄弟,虽然是贴规格书但没有啥意义

社区闲人 发表于 2023-12-12 18:12:00

用STCH8K64U会更好,使用40MHZ外部晶振。

社区闲人 发表于 2023-12-12 19:10:38

更正:是STC8H8K64U.
此类简单任务,用8位机更好。此所谓:尺有所短,寸有所长。
用STM32的M3也很难完成。

zxcv1973 发表于 2023-12-12 20:46:15

这么高的频率,CLK应该设为推挽输出
页: [1] 2 3
查看完整版本: IO模拟一种2线接口(类似I2C, 但略有不同),请问一个细节如何实现为好