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.

[参考译文] MSP432E401Y:寻求对读取 I-button ROM 代码的支持

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1367359/msp432e401y-seeking-support-for-reading-rom-code-of-i-button

器件型号:MSP432E401Y

工具与软件:

尊敬的 TI 团队:

           在我们的定制电路板中、我们使用  DS9092L+  IButton 探针、  将 DS1971+F5 IButton 与 MSP432E4微控制器连接。 但是、我们在读取 IButton 的 ROM 代码时面临困难。

以下是供您参考的连接方式:

  • iButton 探头:
    • 绿色(数据)连接至微控制器上的 Porte - E2
    • 黑色(+ve LED)连接到微控制器上的 Porte - E3
    • 白色(-ve LED)连接至 GND
    • 红色(接地)连接至 GND

此外、我们已连接一个4.7k Ω 电阻器、用于数据线上的上拉电阻。

我还 在下面提供了 我的微控制器程序供您参考。

#包含

// PE2和 PE3的定义
#define DQ_PIN BIT2
#define LED_PIN BIT3
#define DQ_PORT GPIOE

void delay_us (uint32_t us){
//微秒的延迟函数(近似值)
uint32_t i;
对于(i = 0;i <(us * 3);i++){
__ NOP();


// 1线复位功能
void one_wire_reset (){

DQ_PORT->DIR |= DQ_PIN;//将 PE2设置为输出
DQ_PORT->DATA &=~DQ_PIN;//将 PE2拉至低电平
delay_us (480);//延迟480us
delayus (usecs);
DQ_PORT->DIR &=~DQ_PIN;//将 PE2设置为输入
delay_us (70);//延迟70us
if (DQ_PORT->DATA & DQ_PIN){
//未检测到存在脉冲
DQ_PORT->DATA &=~LED_PIN;//关闭 LED
UARTprintf ("未检测到 IButton。\n");
}其他{
//检测到存在脉冲
dq_port->data |= LED_PIN;//打开 LED
UARTprintf ("IButton Detected.\n");


delay_us (410);//延迟410us

// 1线读取位函数
uint8_t one_wire_read_bit (){
uint8_t 位= 0;
DQ_PORT->DIR |= DQ_PIN;//将 PE2设置为输出
DQ_PORT->DATA &=~DQ_PIN;//将 PE2拉至低电平
delay_us (6);//延迟6us
DQ_PORT->DIR &=~DQ_PIN;//将 PE2设置为输入
delay_us (9);//延迟9us
位=(DQ_PORT->DATA 和 DQ_PIN)? 1:0;//读取位
delay_us (55);//延迟55us
返回位;

// 1线写入位函数
void one_wire_write_bit (uint8_t bit){
DQ_PORT->DIR |= DQ_PIN;//将 PE2设置为输出
DQ_PORT->DATA &=~DQ_PIN;//将 PE2拉至低电平
if (位){
delay_us (6);//延迟6us
DQ_PORT->DIR &=~DQ_PIN;//将 PE2设置为输入
delay_us (64);//延迟64us
}其他{
delay_us (60);//延迟60us
DQ_PORT->DIR &=~DQ_PIN;//将 PE2设置为输入
delay_us (10);//延迟10us

//单线读取字节函数
uint8_t One_Wire_read_Byte (){
uint8_t i;
uint8_t byte = 0;
对于(I = 0;I < 8;I++){
byte |=(One_Wire_Read_bit ()<< i);

返回字节;

//单线写入字节函数
void one_wire_write_byte (uint8_t byte){
uint8_t i;
对于(i = 0;i < 8;i++){
ONE_WIRE_WRITE_BIT (字节和(1 << I));

//此函数用于读取 IButton 的 ROM 代码
void read_rom (uint8_t * rom_code){
uint8_t i;
One_Wire_reset ();
One_Wire_WRITE_BYTE (0x33);//读取 ROM 命令

对于(i = 0;i < 8;i++){
ROM_CODE[i]= one_wire read_BYTE ();
UARTprintf ("D[%d]:%x\n"、i、rom_code[i]);


空 main ()
{

//启用端口 E 的时钟
SYSCTL->RCGCGPIO |= SYSCTL_RCGCGPIO_R4;


//等待端口 E 准备就绪
while ((SYSCTL->PRGPIO 和 SYSCTL_PRGPIO_R4)== 0){}


//将 PE2配置为单线的双向(输入/输出)
DQ_PORT->DIR &=~DQ_PIN;//初始将 PE2设置为输入
DQ_PORT->DEN |= DQ_PIN;//为 PE2启用数字功能

//将 PE3配置为 LED 的输出
DQ_PORT->DIR |= LED_PIN;//将 PE3设置为输出
DQ_PORT->DEN |= LED_PIN;//为 PE3启用数字功能

READ_ROM (ROM_CODE);

INT I;
用于(I=0;I<8;I++)
{
UARTprintf ("D[%d]:%x\n"、i、rom_code[i]);

//主循环(可用于连续读取数据或处理其他任务)
while (1){
//您的主应用程序代码

请协助我们 尽快解决此问题 、以便我们能够成功读取 IButton 的 ROM 代码。

谢谢你。

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

    您好!

     我不了解  DS9092L+   DS1971+F5。 我将建议您捕获 PE2和 PE3信号并展示给 iButton 支持团队。 您知道您的 PE2和 PE3是否具有正确的波形吗? 如果您认为 PE2和 PE3的生产正确,那么 iButton 可以帮助您调试其产品。 就计时而言、他们还可以评论您的 PE2和 PE3信号是否正确。 我无法提供任何建议、因为我不知道他们的单线产品是如何工作的、以及与 ROM 通信的协议是什么。  

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

    亲爱的查尔斯:

              感谢您的答复。 正如您建议的那样、我就我的问题联系了 i-button link 团队。

               我还有一个问题:我正在使用 MSP430F5529IPN 微控制器。 对于以太网和其他示例、我需要下载哪个 SDK? 我安装了 MSP430 SDK、但在 CCS Resource Explorer 中未显示任何示例。 如果您可以提供一个链接、那将非常有用。

    提前感谢您。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
     我还有一个问题:我使用的是 MSP430F5529IPN 微控制器。

    您好!

     抱歉、您的帖子已路由至 MSP432E 支持团队。 我没有  MSP430F5529IPN 相关经验。 您能否使用 MSP430F5529IPN 器件型号打开新帖子 、以便此帖子将被转至相应的支持团队以获得最佳帮助。