找回密码
 立即注册
查看: 829|回复: 34

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

[复制链接]

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
发表于 2023-12-1 11:41:22 | 显示全部楼层 |阅读模式

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

时序图如下:

截图202312011140064800.jpg

回复 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 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;

点评

STC32F12K54, 由于 iCach的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1  发表于 2023-12-13 11:56
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9497

回帖

1万

积分

管理员

积分
14069
发表于 2023-12-5 07:45:06 | 显示全部楼层
将I/O设置为 【开漏模式】,打开内部上拉电阻 | 或外部加上拉电阻
===【开漏工作模式】,对外设置输出为1,等同于 【高阻输入】
===【开漏工作模式】,【打开内部上拉电阻 | 或外部加上拉电阻】,简单等同于 【准双向口】
截图202312050747023121.jpg


截图202312050748527450.jpg


截图202312050749263511.jpg

回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 2023-12-5 13:02:44 | 显示全部楼层
请问为何56M主时钟,2倍指令时长(WTST = 1),GPIO的速率却只有2~3M, 这个速率是受什么制约造成的?

点评

STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1;时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz  发表于 2023-12-13 11:58
回复 支持 反对 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 2023-12-12 09:46:57 | 显示全部楼层
请问
1.ICache的大小是多大,能否知道特定程序是否进入了ICache
2.有没有方式让程序加载到SRAM(edata)中去运行, 从而跑到更高的速率?
我想通过一些优化, 让GPIO的翻转速率更高 > 5Mbps(目前是3Mbps)
回复 支持 反对 送花

使用道具 举报

该用户从未签到

552

主题

9497

回帖

1万

积分

管理员

积分
14069
发表于 2023-12-12 11:10:18 | 显示全部楼层
STC32F12K54建议最高主频跑 52MHz 以下
STC32F12K54, 由于 iCache的关系,时钟如在 18MHz ~ 52MHz, 都将 WTST = 1;
时钟不要高于52MHz, 这个STC32F是我们首次使用iCache 的 MCU, 还在改进中,会发展到 CPU@200MHz

回复 支持 1 反对 0 送花

使用道具 举报

该用户从未签到

5

主题

89

回帖

405

积分

中级会员

积分
405
 楼主| 发表于 2023-12-12 16:58:32 | 显示全部楼层
神农鼎 发表于 2023-12-12 11:10
STC32F12K54建议最高主频跑 52MHz 以下

这个回答没有回答任何提问, 兄弟,虽然是贴规格书但没有啥意义
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 172 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1363

    积分

    荣誉版主

    积分
    1363
    发表于 2023-12-12 18:12:00 | 显示全部楼层
    用STCH8K64U会更好,使用40MHZ外部晶振。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    4 小时前
  • 签到天数: 172 天

    [LV.7]常住居民III

    17

    主题

    371

    回帖

    1363

    积分

    荣誉版主

    积分
    1363
    发表于 2023-12-12 19:10:38 | 显示全部楼层
    更正:是STC8H8K64U.
    此类简单任务,用8位机更好。此所谓:尺有所短,寸有所长。
    用STM32的M3也很难完成。
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    119

    回帖

    657

    积分

    高级会员

    积分
    657
    发表于 2023-12-12 20:46:15 | 显示全部楼层
    这么高的频率,CLK应该设为推挽输出
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 23:16 , Processed in 0.070214 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表