// application note
AN0015 Setting the I2C SCL duty cycle and an exact bus frequency with the Binho Supernova and Pulsar
Some I2C targets, and some qualification plans, care how each SCL period is split between high and low, not only how many periods there are per second. Adapter firmware 4.6.0 and pyCosmicSDK 1.6.0 let a Binho Supernova or Pulsar set that split directly, from 20 to 80 percent high in steps of 10, and setting it also makes the bus frequency exact rather than rounded. This note explains the call, supplies a script that applies a ratio and prints what the adapter reports, and gives the ratios measured on the wire at 100 kHz and 400 kHz with a logic analyzer.
- Products
- Binho SupernovaBinho Pulsar
- Protocols
- I2C
- Topics
- Bus Timing
- Revision
- Rev 1.0 · November 6, 2026
// outcomes
What you'll walk away with
This document covers:
- what
I2cController.set_duty_cycledoes and what it leaves alone - the ratios firmware accepts, and what it answers for the ones it refuses
- why setting a ratio also makes the frequency exact
- a script that applies a ratio, generates traffic to measure, and prints what the adapter reports
- the split measured on the wire at 100 kHz and 400 kHz
It does not cover ratios outside 20 to 80 percent, duty-cycle control on the Supernova's I3C port, or SPI. SPI clock timing is a separate firmware change.
// background
Background
An I2C controller chooses a high time and a low time for every SCL period. The I2C specification sets minimums for both (tHIGH and tLOW), and most controllers pick a split on their own. That is fine until a target is sensitive to it, or until a test plan asks for a specific split: a 30:70 clock to check that a target samples correctly with a short high phase, or a 40:60 clock to match the timing of the system the target will ship in.
Until now the Binho adapters chose the split themselves. At 100 kHz the default is about 46 percent high; at 400 kHz, about 40 percent. There was no way to ask for another. Adapter firmware 4.6.0 and pyCosmicSDK 1.6.0 add one call that sets it.
// applicable devices
Applicable devices
| Adapter | Identifier | Basis |
|---|---|---|
| Binho Supernova | hardware revision C, firmware 4.6.0 pre-release build 80cbb484 |
measured, this document |
| Binho Pulsar | hardware revision C, firmware 4.6.0 pre-release build ea77618b |
measured during firmware validation, within 1 percent of the Supernova; not re-measured for this document |
| Either adapter | firmware 4.5.1 or earlier | refuses the call with FW_UNSUPPORTED_COMMAND |
Note: this revision was written against pre-release builds. The firmware reports its version as
4.5.1with a build suffix because the version string had not yet been moved to 4.6.0. The call and its behavior are those of the 4.6.0 release.
// what's covered
What's covered in the note
- 01 Introduction
- 02 System overview
- 03 Hardware setup
- 04 Software setup
- 05 The duty-cycle call
- 06 Procedure
- 07 Measured results
- 08 Troubleshooting
The full procedure, measured results, and reference code are in the PDF and the assets archive.
// materials
What you'll need
Binho Supernova USB host adapter for I3C, I2C, SPI & UART View product
Binho Pulsar USB host adapter for I2C, SPI, UART, GPIO & CAN-FD View product // trusted by engineering teams at
+ hundreds more
// related notes
Related Application Notes
// newsletter
Get new application notes
New notes, firmware releases, and tool updates from Binho. No spam, unsubscribe anytime.
Put it on the bench
Every step in AN0015 was run on Binho Supernova and Binho Pulsar. Get the hardware to reproduce it, or talk to our engineers about your I2C bring-up.