1
\$\begingroup\$

I am wanting to change some of the configuration parameters contained in registers in the Allegro Microsystems ACS71020. I am using an I2C version of the IC. Here is the datasheet: https://www.allegromicro.com/-/media/Files/Datasheets/ACS71020-Datasheet.ashx . In particular, I would like to set a specific I2C address for the chip and disable the default analog voltage input selection approach to choosing the I2C address so I can use those pins for other purposes. The datasheet suggests that I should be able to permanently make such a change by updating register 0x0F/0x1F.

I am able to read data from registers but I have been unable to write to any register including register 0x0F. The wire.endTransmission() call terminates successfully but on reading back the register, nothing has changed. I am clearly missing something. There are ECC codes for these registers. Is that something I have to set?

I can post a sample program if someone has the patience to look at it.

Update: Problem solved. See comments to Umar's answer below.

Thanks for the help.

\$\endgroup\$
  • \$\begingroup\$ Yes you can put the code with markup feature. \$\endgroup\$ – Umar Aug 10 at 8:48
  • \$\begingroup\$ Thanks. I seem to have finally figured it out. It was too simple :-) \$\endgroup\$ – Doug Aug 10 at 9:18
1
\$\begingroup\$

The ACS71020 supports factory and customer EEPROM space as well as volatile registers. The customer access code must be sent prior to writing these customer EEPROM spaces. In addition, the device includes a set of free space EEPROM registers that are accessible with or without writing the access code.

Th datasheet quotes about access code. Check whether the location you are using is in need of it or not.

\$\endgroup\$
  • \$\begingroup\$ Can you monitor the i2C lines ..for example..with saelae logic analyser \$\endgroup\$ – Umar Aug 10 at 11:45
  • \$\begingroup\$ Umar did point to the solution. The documentation is not very clear but after writing a program to poke and prod the chip I finally discovered how to get writes to work. \$\endgroup\$ – Doug Aug 14 at 5:28
  • \$\begingroup\$ When the chip powers on, you can read from any register but all writes to registers are ignored, except for one. You can write to register 0x2F with contents the 32bit Access Code provided in the datasheet. Thereafter writes to registers works as expected, until the IC is power cycled. If register 0x30 is read, it will now show that the IC is in customer mode. \$\endgroup\$ – Doug Aug 14 at 5:44
  • \$\begingroup\$ Please add your own answer and mention the steps you took to solve it. It will be helpful to others \$\endgroup\$ – Umar Aug 14 at 5:53
1
\$\begingroup\$

Umar did point out the solution. The documentation is not very clear but after writing a program to poke and prod the chip I finally discovered how to get writes to work.

When the chip powers on, you can read from any register and in particular if you read register 0x30 you will see that the IC is in "Non customer mode". All writes to registers are ignored, except for one, register 0x2F the "Access Code Register". You can write to register 0x2F with contents the 32bit Access Code provided in the datasheet. Thereafter writes to registers works as expected, until the IC is power cycled. If register 0x30 is read, it will now show that the IC is in "Customer mode".

\$\endgroup\$
  • \$\begingroup\$ Something new to learn everytime \$\endgroup\$ – Umar Aug 14 at 16:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.